Tanto quanto eu sei, não há configuração ou algo parecido para fazer isso. Mas nem tudo está perdido, é claro que podemos usar o
BufWritePre
comando automático.
Isso é executado antes que o buffer seja gravado no disco. Assim, podemos criar o diretório lá, se ele ainda não existir.
Por exemplo:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Primeiro, verificamos se o diretório existe
isdirectory
, caso contrário, ocorre mkdir
um erro.
<afile>
refere-se ao arquivo que estamos tentando salvar; :p
é um modificador para expandi-lo para o nome do caminho completo (em vez de relativo) e :h
remove o último componente do caminho (o arquivo).
- Em seguida, ligamos,
mkdir()
se necessário. Precisamos da p
bandeira para mkdir()
criar todos os diretórios dos pais (por exemplo, no caso de nonexistent/more_nonexisting/file
.
Obviamente, você também pode executar o mkdir()
comando na linha de comando do Vim ou vinculá-lo a um keybind, ou seja:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Aqui eu usei, em %
vez de <afile>
, já que isso é válido apenas dentro de um comando automático ( %
refere-se ao buffer ativo no momento, que não funcionaria :wa
por exemplo; <afile>
refere-se ao nome do arquivo do buffer que aciona o autocmd).
Você também pode pedir uma confirmação antes de escrever um diretório, se desejar. Consulte esta pergunta para obter mais detalhes: Como impedir o Vim de gravar um arquivo no comando automático BufWritePre?
O trecho acima criará o diretório na primeira gravação ( :w
). Você também pode criar o diretório quando o abrir pela primeira vez (ou seja, logo após digitar vim ...
) usando o BufNewFile
autocmd em vez de BufWritePre
.
Há também um plugin chamado auto_mkdir, que é efetivamente o mesmo que o descrito acima.
Nesta página,
há um trecho ligeiramente expandido que também pergunta se você deseja criar o diretório primeiro, o que alguns podem considerar úteis. Ele também converte o nome do arquivo da codificação antes de escrevê-lo:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Não tenho certeza se isso é realmente necessário, mas se você misturar muitas codificações e obter nomes de arquivos estranhos, pode tentar.
Coloquei tudo isso em um auto_mkdir2.vim
plugin para facilitar a instalação.