Я думаю, что мне удалось сделать это в три строки, комбинируя то, что другие говорят об этом ответе.
Это, кажется, сделать трюк:
if has("autocmd")
autocmd BufWritePre * :silent !mkdir -p %:p:h
end
Он пытается автоматически создать папку при сохранении буфера. Если что-то плохое происходит (например, проблемы с разрешениями), он просто заткнется и позволит файлу сбой записи.
Если кто-либо видит какие-либо очевидные недостатки, отправьте комментарий. Я не очень разбираюсь в vimscript.
EDIT: Заметки благодаря ZYX
- Это не будет работать, если ваши папки имеют пробелы на них (по-видимому, они не правильно убежали или что-то)
- Или, если вы делаете псевдо-файлы.
- Или, если вы ищете свой vimrc.
- Но сын, он короткий.
`MkDir -p%: h` лучше, потому что он работает для вложенных несуществующих путей, не вызывает ошибку, когда путь уже существует, а `%: h` - полный путь к текущему файлу. Однако я не знаю, как это сделать автоматически. Обычно это делается с помощью automcommands, но событие `BufWritePre`, похоже, не работает здесь. – 2010-11-27 17:11:29
Определите функцию, которая проверяет, существует ли файл и вызывает встроенную `write`, и вызывает систему в` mkdir -p` на `dirname` в противном случае, сопоставьте ее с` W` ... Я слишком ленив, чтобы искать синтаксис и отправить его в качестве ответа ... Извините – khachik 2010-11-27 17:16:48
Я думаю, что я мог бы комбинировать ваши предложения и псевдоним `: w` с` mkdir -p%: h`, за которым следует builting `: write` – 2010-11-27 17:47:25