Soweit mir bekannt ist, gibt es keine oder eine solche Einstellung, um dies zu tun. Aber nicht alles ist verloren, wir können natürlich den
BufWritePre
Autobefehl verwenden.
Dies wird ausgeführt, bevor der Puffer auf die Festplatte geschrieben wird. So können wir das Verzeichnis dort anlegen, wenn es noch nicht existiert.
Beispielsweise:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Wir prüfen zuerst, ob das Verzeichnis mit existiert
isdirectory
, sonst mkdir
gibt es einen Fehler.
<afile>
verweist auf die Datei, die wir speichern möchten; :p
ist ein Modifikator zum Erweitern auf den vollständigen Pfadnamen (und nicht auf den relativen Pfadnamen) und zum :h
Entfernen der letzten Pfadkomponente (der Datei).
- Wir rufen
mkdir()
dann bei Bedarf an. Wir brauchen das p
Flag für mkdir()
alle Elternverzeichnisse (zB im Fall von nonexistent/more_nonexisting/file
.
Sie können den mkdir()
Befehl natürlich auch über die Vim-Befehlszeile ausführen oder ihn an eine Tastaturbindung binden.
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Hier habe ich %
stattdessen verwendet <afile>
, da dies nur innerhalb eines Autocommands gültig ist ( %
bezieht sich auf den aktuell aktiven Puffer, der :wa
zum Beispiel nicht funktionieren würde ; <afile>
bezieht sich auf den Dateinamen des Puffers, der das Autocmd auslöst).
Sie können auch eine Bestätigung anfordern, bevor Sie ein Verzeichnis schreiben, wenn Sie möchten. Weitere Informationen finden Sie in dieser Frage: Wie kann ich verhindern, dass Vim eine Datei im automatischen Befehl BufWritePre schreibt?
Das obige Snippet erstellt das Verzeichnis beim ersten Schreiben ( :w
). Wenn Sie möchten , können Sie das Verzeichnis auch erstellen, wenn Sie es zum ersten Mal öffnen (dh direkt nach der Eingabe vim ...
), indem BufNewFile
Sie statt autocmd verwenden BufWritePre
.
Es gibt auch ein Plugin namens auto_mkdir, das im Grunde dasselbe ist wie oben.
Auf dieser Seite
befindet sich ein etwas erweitertes Snippet, das Sie auch fragt, ob Sie zuerst das Verzeichnis erstellen möchten, was einige als nützlich erachten. Es hat auch den Dateinamen der Kodierung vor dem Schreiben konvertiert:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Ich bin mir nicht sicher, ob dies tatsächlich erforderlich ist, aber wenn Sie viele Codierungen mischen und komische Dateinamen erhalten, können Sie es versuchen.
Ich habe all das in ein auto_mkdir2.vim
Plugin eingefügt, um die Installation zu vereinfachen.