Saya memiliki file dengan garis yang terlihat seperti ini:
foofoo.xy.barbar
Saya ingin mengubah xy
ke gh
. Saya mencoba melakukan 2r-> gh, tetapi jelas itu tidak berhasil, karena menggantikan xy
dengan gg
dan kemudian memindahkan kursor saya satu tempat ke kiri.
Apakah ada cara untuk melakukan ini tanpa memasuki mode memasukkan, atau tanpa menggunakan lebih banyak penekanan tombol (misalnya :s/xy/gh/)?
replace
repeated-commands
durron597
sumber
sumber
R
memasuki Mode Ganti.:help replace-mode
untuk informasi lebih lanjut.vt.rgh
. Tetapi hasilnya sama dengan milik Anda kecuali untuk posisi kursor.cwgh<esc>
akan bekerja dengan baik.minimize-keystrokes
adalah tag yang baik, itu biasanya tidak benar-benar apa pertanyaannya adalah tentang , seperti itu. (Saya menolak suntingan yang Anda sarankan) ... Mungkin Anda harus mendiskusikannya di meta?Jawaban:
Jika teks baru memiliki panjang yang sama dengan teks lama, mode ganti Vim adalah opsi. Dari mode normal, R(itu huruf besar "r") membawa Anda ke mode ganti. Ini mirip dengan "menimpa" di beberapa editor teks lain: alih-alih memasukkan karakter baru seperti dalam mode memasukkan, mengetik akan menggantikan karakter di bawah kursor, dan kemudian maju ke kursor berikutnya. (Anggap saja huruf kecil
r
, tetapi untuk lebih dari satu karakter pada satu waktu.) Temukan dokumentasi untuk mengganti mode dengan:help replace-mode
.Dalam kasus Anda: dengan kursor di antara
.
danx
, masuk untuk mengganti mode dengan menekan R. Sekarang ketika Anda mengetiknya gmenggantikan "x" dan pindah ke karakter berikutnya, sehingga Anda dapat mengetik huntuk mengganti "y". Suntingan Anda selesai sekarang, jadi Escapeuntuk kembali ke mode normal.(Ini berfungsi ketika teks pengganti Anda memiliki panjang yang sama dengan teks yang lama, tetapi jika penggantian Anda lebih panjang atau lebih pendek,
c
mungkin itu yang Anda butuhkan: teks itu akan menggantikan 1 teks dalam suatu gerakan, dengan teks yang Anda ketik lalu ketik. banyak cara untuk melakukan penggunaanc
, misalnya: dengan kursor antara.
danx
, ct.ABC
Escapemengatakan untuk c hange teks (up ' t il berikutnya.
) dengan 'ABC').1 Ini akan menarik teks dalam gerakan ke dalam
"
register / tidak disebutkan namanya dan kemudian beralih ke mode insert, sehingga Anda dapat mengetik sesuatu untuk menggantikannya, dan kemudian Escapekembali ke mode normal.sumber
n
untuk mengganti hinggan
kemunculan-ke-10 dari karakter target. Ini berguna untuk mengganti bagian label dengan formatw_x_y_z
dana-b-c-d
. Gunakanf
alih-aliht
untuk menghapus karakter pembatas juga.Ada beberapa cara Anda bisa melakukan ini, tetapi yang paling sederhana yang dapat saya pikirkan adalah:
TL; DR
fxcw<REPLACEMENT TEXT>
Penjelasan
fx
melompat Anda ke x (lihathelp *f*
)cw
mengatakan untuk mengubah kata (lihat:h *c*
,,:help *w*
dan:help cw
untuk informasi lebih lanjut), menghapus teks "xy" dan memasuki mode sisipkan, membiarkan Anda meletakkan apa pun yang Anda inginkan di sana.Satu keuntungan dari pendekatan ini adalah ia menggunakan perintah manipulasi & navigasi teks yang sangat umum digunakan. Yang lain adalah "xy" bisa panjang, dan ini masih bekerja.
The
cw
karya karena objek teks Anda dikelilingi oleh periode (.
), yang bertindak sebagai batas dengan kata.Jika kursor Anda sudah pada karakter "y" (atau karakter apa pun dalam teks yang akan diganti), Anda bisa menggunakan
ciw<REPLACEMENT TEXT>
. Ini memberitahu vim untuk mengubah kata Anda, bahkan jika Anda tidak di awal. Lihat:help text-objects
untuk informasi lebih lanjut tentangciw
dan objek teks secara umum.sumber
Ganti mode:
adalah solusi yang paling jelas jika penggantiannya sama dengan yang asli tetapi Anda juga bisa melakukannya:
atau:
sumber