Bildiğim kadarıyla, bunu yapacak herhangi bir ayar veya bazı yoktur. Fakat hepsi kaybolmaz, elbette BufWritePre
otomatik komutu kullanabiliriz
.
Bu, arabellek diske yazılmadan önce yürütülür. Böylece henüz mevcut değilse, oradaki dizini oluşturabiliriz.
Örneğin:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- İlk önce dizinin var olup olmadığını kontrol ederiz
isdirectory
, aksi halde mkdir
hata verir.
<afile>
kaydetmeye çalıştığımız dosyayı ifade eder; :p
tam yol adına genişletmek için bir değiştiricidir (göreceli değil) ve :h
son yol bileşenini (dosya) kaldırır.
mkdir()
Gerekirse arayacağız . Tüm ebeveyn dizinlerini yapmak için p
bayrağa ihtiyacımız var mkdir()
(yani nonexistent/more_nonexisting/file
.
Elbette, mkdir()
Vim komut satırından da komutu çalıştırabilir veya bir tuşa bağlayabilirsiniz, yani:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Burada , %
bunun yerine <afile>
sadece bir otokomun içinden geçerli olduğu %
için kullandım (şu anda aktif olan arabelleğe başvuruyor, :wa
örneğin çalışmayan ; <afile>
otocmd'yi tetikleyen arabelleğin dosya adını ifade ediyor).
İsterseniz bir dizin yazmadan önce onay isteyebilirsiniz. Daha fazla ayrıntı için bu soruya bakın: Vim'in BufWritePre otomatik komutunda bir dosya yazmasını nasıl durdurabilirim?
Yukarıdaki kod parçası, ilk write ( :w
) dizinini oluşturur . İsterseniz, ilk açtığınızda (yani sadece yazdıktan hemen sonra vim ...
) BufNewFile
yerine autocmd'yi kullanarak da dizin oluşturabilirsiniz BufWritePre
.
Ayrıca auto_mkdir adında bir eklenti var ve bu da yukarıdakilerle aynı.
Bu sayfada
, ilk önce dizini oluşturmak isteyip istemediğinizi soran, bazılarının yararlı olabileceğini düşünen hafifçe genişletilmiş bir snippet var. Ayrıca, yazmadan önce kodlamanın dosya adını da dönüştürür:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Gerçekte bunun gerekli olup olmadığından emin değilim, ama kodlamaları çok karıştırırsanız ve garip dosya isimleri alırsanız, deneyebilirsiniz.
Kolay kurulum için yukarıdakilerin tümünü bir auto_mkdir2.vim
eklentiye yerleştirdim.