Sejauh yang saya tahu tidak ada pengaturan atau semacamnya untuk melakukan ini. Tapi tidak semua hilang, kita tentu saja bisa menggunakan
BufWritePreautocommand.
Ini dijalankan sebelum buffer ditulis ke disk. Jadi kita dapat membuat direktori di sana jika belum ada.
Sebagai contoh:
augroup Mkdir
autocmd!
autocmd BufWritePre *
\ if !isdirectory(expand("<afile>:p:h")) |
\ call mkdir(expand("<afile>:p:h"), "p") |
\ endif
augroup END
- Kami pertama-tama memeriksa apakah direktori tersebut ada
isdirectory, atau mkdirmemberikan kesalahan.
<afile>merujuk ke file yang kami coba simpan; :padalah pengubah untuk memperluasnya ke pathname lengkap (bukan relatif), dan :hmenghapus komponen path terakhir (file).
- Kami kemudian memanggil
mkdir()jika diperlukan. Kita perlu pbendera untuk mkdir()membuat semua direktori orang tua (mis. Dalam kasus nonexistent/more_nonexisting/file.
Anda bisa, tentu saja, juga menjalankan mkdir()perintah dari Vim commandline, atau mengikatnya ke keybind, yaitu:
nnoremap <Leader>m :call mkdir(expand("%:p:h"), "p")<CR>
Di sini saya menggunakan %alih-alih <afile>, karena itu hanya berlaku dari dalam autocommand ( %merujuk ke buffer yang saat ini aktif, yang tidak akan berfungsi dengan :wamisalnya; <afile>merujuk pada nama file buffer yang memicu autocmd).
Anda juga dapat meminta konfirmasi sebelum menulis direktori jika Anda mau. Lihat pertanyaan ini untuk detail lebih lanjut: Bagaimana saya bisa menghentikan Vim dari menulis file dalam perintah otomatis BufWritePre?
Cuplikan di atas akan membuat direktori pada write pertama ( :w). Anda bisa, jika mau, juga membuat direktori ketika pertama kali membukanya (yaitu setelah mengetik vim ...) dengan menggunakan BufNewFileautocmd alih-alih BufWritePre.
Ada juga sebuah plugin bernama auto_mkdir yang secara efektif sama dengan yang di atas.
Pada halaman ini
ada cuplikan yang sedikit diperluas yang juga menanyakan apakah Anda ingin membuat direktori terlebih dahulu, yang mungkin dianggap bermanfaat oleh beberapa orang. Ini juga telah mengonversi nama file pengodean sebelum menulisnya:
call mkdir(iconv(expand("%:p:h"), &encoding, &termencoding), 'p')
Saya tidak yakin apakah ini benar-benar diperlukan, tetapi jika Anda mencampur enkode banyak dan mendapatkan nama file yang aneh, Anda bisa mencobanya.
Saya meletakkan semua hal di atas dalam sebuah auto_mkdir2.vimplugin untuk instalasi yang lebih mudah.