Sejauh yang saya tahu tidak ada pengaturan atau semacamnya untuk melakukan ini. Tapi tidak semua hilang, kita tentu saja bisa menggunakan
BufWritePre
autocommand.
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 mkdir
memberikan kesalahan.
<afile>
merujuk ke file yang kami coba simpan; :p
adalah pengubah untuk memperluasnya ke pathname lengkap (bukan relatif), dan :h
menghapus komponen path terakhir (file).
- Kami kemudian memanggil
mkdir()
jika diperlukan. Kita perlu p
bendera 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 :wa
misalnya; <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 BufNewFile
autocmd 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.vim
plugin untuk instalasi yang lebih mudah.