Bagaimana cara mengganti satu kata di bawah kursor?

144

Bagaimana cara mengganti kata di bawah kursor di Vim.

Jadi, bukannya menggunakan dwmaka imaka kata dan kemudian Esc, ada kombinasi sederhana untuk menggantikan kata di bawah kursor?

ucapan
sumber

Jawaban:

251
ciw

(ubah kata dalam) akan mengubah seluruh kata di bawah kursor. Dibandingkan dengan

cw

yang hanya akan mengubah kata dari posisi kursor saat ini . Untuk info lebih lanjut lihat pertanyaan / jawaban SO ini .

Brian Agnew
sumber
Bagaimana menghadapi situasi jika kata tersebut mengandung titik atau garis miring (misalnya /usr/bin/bashatau 1222.333)? Sepertinya vim mengartikan /dan .sebagai akhir kata dan tidak akan memilih seluruh string.
Alexander Cska
85

Saya sering menemukan diri saya ingin mengganti satu kata dengan kata lain yang telah saya tarik dari tempat lain. Masalah dengan solusi lain adalah jika Anda mencoba mengubah kata, maka tempel Anda berikutnya adalah kata yang Anda hapus cw.

Coba yang berikut ini:

1 "This first word should overwrite the second"

yiw     yank inner word (copy word under cursor, say "first").
...     Move the cursor to another word (say "second").
viwp    select "second", then replace it with "first". 

Semoga itu yang kamu cari.

Sangat halus
sumber
7
Ini bekerja dengan baik tetapi hanya jika penggantian harus dilakukan once. Jika saya harus mengganti pasangan second' by pertama` (dalam contoh Anda), kata yang disalin menjadi secondsetelah penggantian pertama.
ViFI
32

ciw

c   change
iw  inner word

Ini akan menghapus kata di bawah kursor (bahkan jika kursor berada di suatu tempat di tengah kata) dan masuk ke mode insert.


Lihat juga dokumentasi Vim untuk referensi:

:help c
:help text-objects
Xophmeister
sumber
17

Jika Anda ingin mengubah kata dengan kata yang sebelumnya ditarik, ada solusi lain untuk viwp(setelah Anda menarik kata pertama).

ciwmenghapus kata sebelumnya dan menempatkan Anda dalam mode sisipkan di tempat kata sebelumnya. Tetapi kemudian Anda dapat menggunakan ctrl+r, 0untuk memasukkan isi register 0 (yang berisi kata yang sebelumnya disenggol).

Begitu:

yiw
[move to next word]
ciw
ctrl+r
0

Ini berfungsi lebih baik daripada viwpkarena setelah penggunaan pertama Anda kemudian dapat berulang kali melakukan penggantian dengan .. Itu juga tidak beralih ke mode visual dan sorot sebentar.

Connor
sumber
1
Tidak yakin apa yang Anda maksudkan bahwa itu tidak mengubah mode, tampaknya sebaliknya, tetapi mungkin itu yang Anda inginkan, untuk tetap dalam mode insert. Tetapi keuntungan besar adalah bahwa ini (bertentangan dengan viwp) dapat dilakukan beberapa kali hanya dengan satu sentakan. Terima kasih!
Palo
Oh Anda benar, saya berpikir untuk masuk ke mode visual, diedit. Saya tidak menyadari itu adalah batasan viwp- bahkan .tidak menduplikatnya.
Connor
3
Sejauh ini, ini adalah solusi terbaik ketika kami sudah mencabut kata penggantinya.
mljrg
1
Ini jawabannya! Kemampuan untuk menggunakan .ini sangat bagus!
izzy
1

Coba cw- seperti pada 'ubah kata'.

Gunakan http://linuxmoz.com/vi-commands-cheat-sheet/ atau lembar contekan lainnya sebagai referensi.

Kosma Dunikowski
sumber
1
Itu bekerja, tetapi itu hanya akan mengubah karakter di sebelah kanan kursor
Brian Agnew