Autant que je sache, il n'y a pas de réglage ou quelque chose de ce genre. Mais tout n'est pas perdu, nous pouvons bien sûr utiliser la commande
BufWritePre
automatique.
Ceci est exécuté avant que le tampon ne soit écrit sur le disque. Donc, nous pouvons créer le répertoire ici s'il n'existe pas encore.
Par exemple:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- On vérifie d’abord si le répertoire existe avec
isdirectory
, sinon on mkdir
obtient une erreur.
<afile>
fait référence au fichier que nous essayons de sauvegarder; :p
est un modificateur pour le développer jusqu'au chemin complet (plutôt que relatif), et :h
supprime le dernier composant de chemin (le fichier).
- Nous appelons ensuite
mkdir()
si nécessaire. Nous avons besoin du p
drapeau pour mkdir()
faire tous les répertoires des parents (c'est-à-dire dans le cas de nonexistent/more_nonexisting/file
.
Vous pouvez bien sûr également exécuter la mkdir()
commande à partir de la ligne de commande Vim ou la lier à un raccourci clavier, c'est-à-dire:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Ici, j’ai utilisé à la %
place de <afile>
, puisque cela n’est valable que depuis une autocommande ( %
fait référence au tampon actuellement actif, qui ne fonctionnerait pas :wa
par exemple; <afile>
fait référence au nom de fichier du tampon qui déclenche l’autocmd).
Vous pouvez également demander une confirmation avant d'écrire un répertoire si vous le souhaitez. Voir cette question pour plus de détails: Comment puis-je empêcher Vim d'écrire un fichier dans la commande automatique BufWritePre?
L'extrait ci-dessus créera le répertoire sur le premier write ( :w
). Si vous le souhaitez, vous pouvez également créer le répertoire lors de sa première ouverture (c'est-à-dire juste après sa saisie vim ...
) en utilisant BufNewFile
autocmd à la place de BufWritePre
.
Il existe également un plugin appelé auto_mkdir qui est en réalité le même que celui ci-dessus.
Sur cette page
, un extrait de code légèrement développé vous demande également si vous souhaitez créer le répertoire en premier, ce que certains jugeront peut-être utile. Il a également converti le nom de fichier de l'encodage avant de l'écrire:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Je ne sais pas si cela est réellement nécessaire, mais si vous mélangez beaucoup les encodages et obtenez des noms de fichiers étranges, vous pouvez l'essayer.
Je mets tout ce qui précède dans un auto_mkdir2.vim
plugin pour une installation plus facile.