Per quanto ne so, non esiste alcuna impostazione o qualcosa del genere per farlo. Ma non tutto è perduto, ovviamente possiamo usare il
BufWritePre
comando automatico.
Questo viene eseguito prima che il buffer venga scritto sul disco. Quindi possiamo creare la directory lì se non esiste ancora.
Per esempio:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Per prima cosa controlliamo se la directory esiste
isdirectory
, altrimenti mkdir
viene visualizzato un errore.
<afile>
si riferisce al file che stiamo cercando di salvare; :p
è un modificatore per espanderlo al percorso completo (anziché relativo) e :h
rimuove l'ultimo componente del percorso (il file).
- Chiamiamo quindi
mkdir()
se richiesto. Abbiamo bisogno della p
bandiera per mkdir()
creare tutte le directory dei genitori (es. Nel caso di nonexistent/more_nonexisting/file
.
Naturalmente, puoi anche eseguire il mkdir()
comando dalla riga di comando di Vim o associarlo a un keybind, ovvero:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Qui ho usato %
invece di <afile>
, poiché questo è valido solo all'interno di un autocomando (si %
riferisce al buffer attualmente attivo, che non funzionerebbe :wa
ad esempio; si <afile>
riferisce al nome del file del buffer che attiva l'autocd).
Se lo desideri, puoi anche chiedere una conferma prima di scrivere una directory. Vedi questa domanda per maggiori dettagli: Come posso impedire a Vim di scrivere un file nel comando automatico BufWritePre?
Lo snippet precedente creerà la directory sul primo write ( :w
). Se lo desideri, puoi anche creare la directory quando la apri per la prima volta (cioè subito dopo aver digitato vim ...
) usando BufNewFile
autocmd invece di BufWritePre
.
C'è anche un plug-in chiamato auto_mkdir che è effettivamente lo stesso sopra.
In questa pagina
c'è uno snippet leggermente espanso che ti chiede anche se vuoi prima creare la directory, che alcuni potrebbero considerare utili. Ha anche convertito il nome file della codifica prima di scriverlo:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Non sono sicuro che ciò sia effettivamente necessario, ma se mescoli molto le codifiche e ottieni nomi di file strani, potresti provarlo.
Ho inserito tutto quanto sopra in un auto_mkdir2.vim
plugin per una più facile installazione.