Saya mencoba memperbaiki kode dari jawaban ini untuk meminta konfirmasi sebelum membuat direktori yang hilang, inilah yang saya tulis:
function! CreateDirectoryAskConfirmation(path)
if !isdirectory(a:path)
echohl Question
echo "Create directory " . a:path . "?"
echohl None
let response = nr2char(getchar())
if response ==? "y"
call mkdir(a:path, "p")
endif
endif
endfunction
autocmd BufWritePre * call CreateDirectoryAskConfirmation(expand("<afile>:p:h"))
Satu hal yang saya lewatkan: ketika saya tidak menekan y
pada prompt saya ingin Vim untuk membatalkan penulisan jadi saya tidak mendapatkan kesalahan E212: Can't open file for writing
dan saya tidak perlu menekan tombol lain untuk membuat pesan kesalahan hilang. Ada cara untuk mencapainya?
:
perintah tidak pernah diperlukan untuk perintah.silent
sehingga Anda tidak akan menerima pesan jika Anda tidak menggunakan iniautogroup
. Saya juga memperbaiki masalah lain yang saya perhatikan::w another_name
tidak berhasil (tidak berfungsi).write
hanya akan menulis ke nama file saat ini (sama seperti saat Anda mengetik:write
), dan:write another_filename
tidak akan berfungsi (masih akan menggunakan nama file asli).bufype
pengaturan untuk mendapatkan tipe buffer. Jangan ragu untuk mengedit posting dengan perbaikan (atau jika tidak, saya akan minggu depan).