Pendek, aman, tanpa plugin:
:sav new_name
:!rm <C-R># // or !del <C-R># for windows
control+ R, #akan langsung diperluas ke file alternatif (jalur yang diedit sebelumnya di jendela saat ini) sebelum menekan Enter. Itu memungkinkan kami untuk meninjau apa yang sebenarnya akan kami hapus. Menggunakan pipa |
dalam kasus seperti itu tidak aman, karena jika sav
gagal karena alasan apa pun, #
masih akan menunjuk ke tempat lain (atau tidak ke mana-mana). Itu berarti !rm #
atau delete(expand(#))
mungkin menghapus file yang sama sekali berbeda! Jadi lakukan dengan tangan hati-hati atau gunakan skrip yang baik (mereka disebutkan dalam banyak jawaban di sini).
Pendidikan
... atau coba bangun sendiri fungsi / perintah / skrip. Mulai dari sth sederhana seperti:
command! -nargs=1 Rename saveas <args> | call delete(expand('#')) | bd #
setelah vimrc reload, ketikkan saja :Rename new_filename
. Apa masalah dengan perintah ini?
Tes keamanan 1: Apa yang dilakukan :Rename
tanpa argumen?
Ya, itu menghapus file yang disembunyikan di '#'!
Solusi: Anda dapat menggunakan mis. kondisi atau try
pernyataan seperti itu:
command! -nargs=1 Rename try | saveas <args> | call delete(expand('#')) | bd # | endtry
Tes keamanan 1:
:Rename
(tanpa argumen) akan menimbulkan kesalahan:
E471: Diperlukan argumen
Tes keamanan 2:
Bagaimana jika nama akan sama dengan yang sebelumnya?
Tes keamanan 3:
Bagaimana jika file akan berada di lokasi yang berbeda dari yang sebenarnya?
Perbaiki sendiri. Agar mudah dibaca, Anda dapat menulisnya dengan cara ini:
function! s:localscript_name(name):
try
execute 'saveas ' . a:name
...
endtry
endfunction
command! -nargs=1 Rename call s:localscript_name(<f-args>)
catatan
!rm #
lebih baik dari !rm old_name
-> Anda tidak perlu mengingat nama lama
!rm <C-R>#
lebih baik daripada !rm #
ketika melakukannya dengan tangan -> Anda akan melihat apa yang sebenarnya Anda hapus (alasan keamanan)
!rm
umumnya tidak terlalu aman ... mv
ke lokasi sampah lebih baik
call delete(expand('#'))
lebih baik daripada perintah shell (OS agnostic) tetapi lebih lama untuk mengetik dan tidak mungkin untuk menggunakan control+R
try | code1 | code2 | tryend
-> ketika kesalahan terjadi saat kode1, jangan jalankan kode2
:sav
(atau :saveas
) setara dengan :f new_name | w
- lihat file_f - dan mempertahankan undo history
expand('%:p')
memberikan seluruh jalur lokasi Anda ( %
) atau lokasi file alternatif ( #
)