Bildiğim kadarıyla, bunu yapacak herhangi bir ayar veya bazı yoktur. Fakat hepsi kaybolmaz, elbette BufWritePreotomatik 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 mkdirhata verir.
<afile>kaydetmeye çalıştığımız dosyayı ifade eder; :ptam yol adına genişletmek için bir değiştiricidir (göreceli değil) ve :hson yol bileşenini (dosya) kaldırır.
mkdir()Gerekirse arayacağız . Tüm ebeveyn dizinlerini yapmak için pbayrağ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 ...) BufNewFileyerine 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.vimeklentiye yerleştirdim.