Bagaimana saya harus mengganti nama file saya saat ini di Vim?
Sebagai contoh:
- Saya sedang mengedit
person.html_erb_spec.rb
- Saya ingin namanya diganti menjadi
person.haml_spec.rb
- Saya ingin terus mengedit
person.haml_spec.rb
Bagaimana saya bisa melakukan ini dengan anggun?
Program Files (x86)
. Setiap saat direktori ini perlu dikerjakan harus dibungkus dengan tanda kutip. Yang mana, banyak.Perintah itu dipanggil
:saveas
, tetapi sayangnya itu tidak akan menghapus file lama Anda, Anda harus melakukannya secara manual. lihat:help saveas
untuk info lebih lanjut.EDIT:
Sebagian besar instalasi vim memiliki file explorer terintegrasi, yang dapat Anda gunakan untuk operasi tersebut. Coba
:Explore
dalam mode perintah (saya benar-benar akan memetakannya ke tombol fungsi, ini sangat berguna). Anda dapat mengganti nama file denganR
atau menghapusnyaD
, misalnya. Tetapi menekan<F1>
explorer akan memberi Anda gambaran yang lebih baik.sumber
Jika Anda menggunakan git dan sudah memiliki plugin tpope's fugitive.vim maka cukup:
Ini akan:
Jika file Anda belum ditambahkan ke repo git maka pertama-tama tambahkan:
sumber
:Gmove
memerlukan jalur relatif untuk nama file baru. Cara yang bagus untuk melakukan ini adalah dengan mengetik:Gmove <ctrl-r>%
yang menambahkan path / nama file saat ini.Saya melakukannya dengan plugin NERDTree:
lalu tekan m
Untuk mengganti nama, Anda dapat memilih
(m)ove the current node
dan mengubah nama file. Juga ada opsi seperti hapus, salin, pindahkan, dll ...sumber
:w newname
- untuk membuat salinan.:e#
.:!rm oldname
.Pada Windows, langkah ke-3 opsional berubah sedikit:
:!del oldname
.sumber
:f newname
2) simpan:w
3) (opsional)!rm oldname
. Keuntungannya adalah bahwa riwayat undo Anda dipertahankan.:saveas
lebih baik dalam hal itu, @rampion - dan melakukan apa yang ditulis @kynan.Jika file sudah disimpan:
Contoh:
Persyaratan Izin:
Simpan Sebagai:
Untuk Windows Tidak Diverifikasi
sumber
Saya akan merekomendasikan
:Rename
dari kasim tope untuk ini.Ini juga mencakup banyak perintah praktis lainnya.
Perintah Rename didefinisikan sebagai berikut di dalamnya saat ini (periksa repo untuk setiap pembaruan!):
sumber
Anda juga dapat melakukannya menggunakan netrw
Perintah explore membuka netrw di direktori file yang terbuka
Pindahkan kursor ke atas file yang ingin Anda ganti namanya:
Ketikkan nama baru, tekan enter, tekan y.
sumber
Pendek, aman, tanpa plugin:
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 jikasav
gagal karena alasan apa pun,#
masih akan menunjuk ke tempat lain (atau tidak ke mana-mana). Itu berarti!rm #
ataudelete(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:
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:Tes keamanan 1:
:Rename
(tanpa argumen) akan menimbulkan kesalahan: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:
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 baikcall delete(expand('#'))
lebih baik daripada perintah shell (OS agnostic) tetapi lebih lama untuk mengetik dan tidak mungkin untuk menggunakan control+Rtry | 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 historyexpand('%:p')
memberikan seluruh jalur lokasi Anda (%
) atau lokasi file alternatif (#
)sumber
sumber
call delete(expand('#'))
Ada fungsi di .vimrc milik Gary Bernhardt yang menangani ini.
sumber
Daftar
%
berisi nama file saat ini.'%:h'
memperlihatkan direktori 'head' yang berisi file saat ini, mis .:%:h
kembali/abc/def
ketika path lengkap file Andaabc/dev/my.txt
sumber
Bagaimana dengan ini (ditingkatkan oleh saran Jake):
sumber
:exe "!mv % newfilename" | e newfilename
Vim memang memiliki
rename
fungsi, tetapi sayangnya itu tidak mempertahankan sejarah.Cara agnostik OS termudah untuk mengubah nama file tanpa kehilangan riwayatnya adalah:
expand('#:p')
mengembalikan path lengkap file yang lebih lama.Gunakan
:bd #
jika Anda juga ingin menghapus file yang lebih lama dari daftar buffer.Atau buat plugin
Jika Anda ingin menggunakan perintah cepat untuk mengganti nama file, tambahkan file baru di bawah ~ / .vim / plugin dengan konten berikut:
Perintah ini
Rename
akan membantu Anda dengan cepat mengganti nama file.sumber
Ada plugin yang jauh lebih besar yang disebut vim-kasim oleh Tim Pope yang mencakup fungsi rename serta beberapa barang lainnya (hapus, temukan, simpan semua, chmod, sudo edit, ...).
Untuk mengganti nama file di vim-kasim:
:Move filename.ext
Dibandingkan dengan rename.vim:
:rename[!] filename.ext
Menghemat beberapa penekanan tombol :)
sumber
Untuk mengganti nama file yang ada tanpa menggunakan plugin Anda harus menggunakan perintah
Perintah ini memungkinkan Anda menjelajahi file di direktori, menghapus atau mengganti nama file. daripada Anda harus menavigasi ke file yang diperlukan di explorer daripada mengetik
R
perintah yang akan memungkinkan Anda untuk mengubah nama filesumber
Saya tidak tahu apakah ini metode "termudah", tetapi dengan asumsi Anda sudah menyimpan file Anda (: w) Saya akan memanggil shell (: sh) dan melakukan cp foo foo.bak sederhana Untuk kembali ke editor gunakan Ctrl-D / Exit. Daftar perintah vi editor yang berguna pada tautan ini
sumber
Anda juga dapat menggunakan: f diikuti oleh: w
sumber
Skrip kecil ini tidak sempurna (tambahan carriage-return yang harus Anda tekan) tapi itu sudah selesai.
sumber
Cara lain adalah dengan menggunakan netrw, yang merupakan bagian asli dari vim.
Lalu ada opsi untuk dihapus, ganti nama, dll.
Berikut ini keymap untuk membuka netrw ke folder file yang sedang Anda edit:
sumber
:sav newfile | !rm #
Perhatikan bahwa itu tidak menghapus file lama dari daftar buffer. Jika itu penting bagi Anda, Anda dapat menggunakan yang berikut ini sebagai gantinya:
:sav newfile | bd# | !rm #
sumber