Я хотел найти решение, которое бы работало как в Linux, так и в Windows (с бинарными файлами Cygwin в пути.) - моя конфигурация Vim разделена между ними.
Одной из проблем является то, что mkdir, я думаю, встроен в оболочку cmd в Windows, поэтому его нельзя переопределить, поместив исполняемый файл Cygwin mkdir ранее в путь.
Я решил эту проблему, вызвав новую оболочку bash для выполнения действия: оттуда mkdir всегда означает, какой исполняемый файл mkdir находится на пути:
!bash -c "mkdir -p ~/.vim-tmp"
Однако проблема в том, что. по крайней мере, в Windows появляется новое окно для оболочки cmd, которое '!' вызывает. Не хочу этого каждый раз, когда я начинаю vim. Затем я обнаружил функцию vim 'system', которая вызывает новую оболочку cmd (значок появляется на панели задач Windows), но окно свернуто. Следовательно:
call system("bash -c \"mkdir -p ~/.vim-tmp\"")
Ужасно, но работает.