Насколько я знаю, нет настройки или что-то подобное для этого. Но не все потеряно, мы, конечно, можем использовать
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
плагин для облегчения установки.