Насколько я знаю, нет настройки или что-то подобное для этого. Но не все потеряно, мы, конечно, можем использовать
BufWritePreавтокоманду.
Это выполняется до того, как буфер будет записан на диск. Таким образом, мы можем создать каталог там, если он еще не существует.
Например:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Сначала мы проверяем, существует ли каталог с
isdirectory, иначе mkdirвыдает ошибку.
<afile>ссылается на файл, который мы пытаемся сохранить; :pявляется модификатором, расширяющим его до полного пути (а не относительного), и :hудаляет последний компонент пути (файл).
- Затем мы позвоним,
mkdir()если потребуется. Нам нужен pфлаг для mkdir()создания всех родительских каталогов (т. Е. В случае nonexistent/more_nonexisting/file.
Конечно, вы также можете запустить mkdir()команду из командной строки Vim или связать ее с привязкой клавиш, то есть:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Здесь я использовал %вместо <afile>, так как это действительно только из автокоманды ( %относится к текущему активному буферу, с которым, например, не будет работать :wa; <afile>относится к имени файла буфера, который запускает autocmd).
Вы также можете запросить подтверждение, прежде чем писать каталог, если хотите. Смотрите этот вопрос для более подробной информации: Как я могу остановить Vim от записи файла в автокоманде BufWritePre?
Приведенный выше фрагмент создаст каталог при первой записи ( :w). При желании вы также можете создать каталог при первом его открытии (т. Е. Сразу после ввода текста vim ...), используя BufNewFileвместо него autocmd BufWritePre.
Существует также плагин с именем auto_mkdir, который практически не отличается от описанного выше.
На этой странице
есть слегка расширенный фрагмент, который также спрашивает вас, хотите ли вы сначала создать каталог, что некоторые могут посчитать полезным. Он также преобразует имя файла кодировки перед записью:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Хотя я не уверен, требуется ли это на самом деле, но если вы много смешиваете кодировки и получаете странные имена файлов, вы можете попробовать это.
Я поместил все вышеперечисленное в auto_mkdir2.vimплагин для облегчения установки.