Bagaimana cara menghapus kata dan masuk ke mode sisipkan di Vim?

98

Dalam mode normal saya dapat menekan Ctrl+ Eyang menghapus sisa kata saat ini dan masuk ke mode penyisipan.

Saya ingin menghapus seluruh kata, terlepas dari posisi kursornya (dalam kata tentunya).

Joernsn
sumber

Jawaban:

165

Anda dapat menggunakan "ubah kata dalam" dengan mengetik "ciw" untuk menghapus kata tempat kursor Anda berada.

Perintah "inner" dan "a" bagus di Vim, coba juga "ci {" di dalam blok {}, atau "ca {" jika Anda juga ingin menghapus {} karakter juga. Untuk menerjemahkan perintah ini ke bahasa Inggris agar lebih mengingatnya, coba: "ubah {blok" dalam dan "ubah {blok".

Dokumentasi di http://vimdoc.sourceforge.net/htmldoc/motion.html#text-objects

Kaali
sumber
"caw" dapat digunakan sebagai pengganti "ciw" dengan fungsi yang sama.
Amjith
Sedangkan 'caw' dan 'ciw' akan menggantikan seluruh kata, 'cw' akan berubah dari posisi kursor saat ini ke akhir kata saat ini.
Drew Stephens
Saya mengedit jawaban dari menceritakan tentang "co {" menjadi "ca {" seperti yang diingatkan oleh komentar jinxed_coders. Kustomisasi lama saya mengimplementasikan perintah "(a) <>" sebagai "(o) uter <>".
Kaali
19
ciwdan cawtidak persis sama: ciwhanya menghapus kata, juga cawmenghapus spasi di belakangnya.
Roberto Bonvallet
5
: membantu objek di vim untuk membaca lebih lanjut tentang pilihan semacam ini.
Aaron
19

Jawab pertanyaan tindak lanjut Anda: viwp

v    -> start visual mode
iw   -> select the 'inner word'
p    -> paste - in visual mode it replaces the visually selected text.
terlalu banyak php
sumber
3
Bagaimana seseorang melakukannya beberapa kali berturut-turut? Setiap kali Anda menempelkan, buffer terisi dengan kata yang saya tempelkan.
Ben Gartner
1
@BenGartner Temukan ini di wiki Vim Tips : Gunakan yiwuntuk menyalin kata saat ini, letakkan kursor di kata yang akan diganti, gunakan ciw<C-r>0. Setelah itu Anda dapat menempatkan kursor pada kata berikutnya dan menggunakan .untuk mengulang penggantinya.
siegi
@BenGartner Jika semua yang Anda coba lakukan adalah mengganti semua contoh WORD_A dengan WORD_B, maka Anda cukup menggunakan mode ex vim :%s/a/b/g,. abisa berupa teks yang sama persis, atau ekspresi reguler, dan byang akan Anda ganti semua yang cocok adengan. Anda dapat menguji regex dengan /mode vim . Ganti %dengan nomor baris atau rentang jika Anda tidak ingin mengganti di semua baris.
Braden Best
8

Untuk pertanyaan kedua: bPldw

Ini akan, secara berurutan, membawa Anda ke awal kata saat ini, memasukkan register default di depan kursor, pergi ke karakter berikutnya (membawa Anda melewati akhir teks yang baru saja Anda sisipkan), dan menghapus sisa kata.

Hank Gay
sumber
5
ini juga menghapus spasi setelah kata. Seharusnya bPlde.
0x89
10
Tidak, harusviwp
aehlke
3

Untuk pertanyaan pertama, bcwjuga berhasil. Artinya " back ke awal kata, change word". Tapi menurut saya ciwlebih berkesan, yang artinya " change inner word", tinggal satu langkah saja.

Untuk pertanyaan kedua tentang "ganti pakai tempel", solusi saya adalah "_diwP. Ini dmenghapus iurutan wke register Anda tidak peduli dan paste konten register default. Keuntungannya adalah Anda dapat menempelkan register default berkali-kali, karena tidak akan tercemar. Ini adalah kompleks kecil jadi saya memetakannya sebagai nnoremap ,r "_diwP.

Justme0
sumber
2

Atau, Anda mungkin bisa menggunakan urutan kunci bdwi untuk menghapus kata saat ini dan masuk ke mode INSERT.

ayaz
sumber
1
Anda dapat menggunakan bcwuntuk pergi ke awal kata saat ini kemudian mengubah kata, yang membuat Anda keluar dari mode penyisipan.
Hank Gay
Jika kursor Anda sudah berada di karakter pertama dari kata tersebut, itu akan menghapus kata sebelumnya.
Warren Pena
3
@WarrenPena Dalam hal ini, gunakan saja dwi. Berhati-hatilah agar polisi tidak menyadarinya, karena DWI ilegal di sebagian besar negara bagian.
Braden Best