O ile mi wiadomo, nie ma takiego ustawienia ani czegoś takiego. Ale nie wszystko przepadło, możemy oczywiście użyć polecenia
BufWritePre
automatycznego.
Jest to wykonywane przed zapisaniem bufora na dysku. Możemy więc utworzyć tam katalog, jeśli jeszcze nie istnieje.
Na przykład:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Najpierw sprawdzamy, czy katalog istnieje
isdirectory
, w przeciwnym razie mkdir
wyświetla błąd.
<afile>
odnosi się do pliku, który próbujemy zapisać; :p
jest modyfikatorem pozwalającym rozwinąć go do pełnej nazwy ścieżki (zamiast względnej) i :h
usuwa ostatni składnik ścieżki (plik).
- W
mkdir()
razie potrzeby dzwonimy . Potrzebujemy p
flagi, mkdir()
aby wszystkie katalogi rodziców (np. W przypadku nonexistent/more_nonexisting/file
.
Możesz oczywiście również uruchomić mkdir()
polecenie z wiersza poleceń Vima lub powiązać je ze skrótem klawiszowym, tj .:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Tutaj użyłem %
zamiast <afile>
, ponieważ jest to poprawne tylko w obrębie komendy automatycznej ( %
odnosi się do aktualnie aktywnego bufora, który nie działałby :wa
na przykład; <afile>
odnosi się do nazwy pliku bufora, który uruchamia autocmd).
Możesz również poprosić o potwierdzenie przed napisaniem katalogu, jeśli chcesz. Zobacz to pytanie, aby uzyskać więcej informacji: Jak mogę powstrzymać Vima przed zapisaniem pliku w automatycznej komendzie BufWritePre?
Powyższy fragment utworzy katalog przy pierwszym write ( :w
). Możesz, jeśli chcesz, również utworzyć katalog przy pierwszym otwarciu (tj. Zaraz po wpisaniu vim ...
) za pomocą BufNewFile
autocmd zamiast BufWritePre
.
Istnieje również wtyczka o nazwie auto_mkdir, która jest faktycznie taka sama jak wyżej.
Na tej stronie
znajduje się nieco rozszerzony fragment, który również pyta, czy chcesz najpierw utworzyć katalog, co niektórzy mogą uznać za przydatny. Konwertuje także nazwę pliku kodowania przed jego zapisaniem:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Nie jestem jednak pewien, czy jest to faktycznie wymagane, ale jeśli często miksujesz kodowanie i otrzymujesz dziwne nazwy plików, możesz spróbować.
Wszystkie powyższe umieściłem we auto_mkdir2.vim
wtyczce, aby ułatwić instalację.