Jika saya memiliki yang berikut ini:
function foo(bar) {
return bar + 1;
}
Dan saya menggunakan cw
untuk mengubah yang pertama bar
untuk baz
, bagaimana cara melompat ke pencocokan berikutnya bar
, sehingga saya dapat menggunakan .
untuk membuat perubahan yang sama?
Saya tidak dapat menggunakan *
, karena itu mencari kata saat ini di bawah kursor, dan saya bodoh tidak mencari untuk bar
pertama kalinya, jadi n
tidak akan berfungsi.
Adakah cara sederhana untuk mencari kemunculan kata berikutnya seperti sebelum saya mengubahnya?
Saya tidak ingin melakukan pencarian dan penggantian, karena ada kejadian lain bar
dalam file saya yang tidak ingin saya ubah, atau karena hanya ada dua contoh bar
, dan saya lupa :%s/bar/baz/
sebelum saya mulai dan itu juga banyak upaya untuk mengubah contoh yang tersisa.
*
pencarian. Terutama itu membuat*
secara visual memilih kata saat ini tanpa menggerakkan kursor Anda. Setelah terinstal, Anda bisa melakukan*ciw
untuk memasukkan kata lama di register pencarian dan mengubah kata. Maka Anda bisa menggunakann
dan.
.n
tidak akan berhasil.Jawaban:
Teks yang baru saja Anda ubah dengan
cw
dipotong menjadi register yang tidak disebutkan namanya sehingga Anda dapat menggunakannya kembali dengan:untuk beralih ke teks berikutnya yang tercakup oleh perubahan terakhir Anda.
sumber
Untuk memperluas romainl sebagai alur kerja yang lengkap ...
Jika Anda lebih suka melakukan pengeditan semacam ini dan kemudian menyadari bahwa Anda perlu menerapkan pengeditan yang sama pada paragraf / fungsi Anda dapat menggunakan
"
dan.
mendaftar.Dalam contoh Anda, Anda dapat melakukan pengeditan awal argumen. Jika Anda memasuki mode visual (saya akan menggunakan Visual Line hanya untuk memastikan Anda memilih semuanya dengan benar) dan kemudian menerapkan pencarian dan ganti.
V]] - Visual Line, hingga akhir paragraf / fungsi.
:'<,'>
Pola ini membutuhkan waktu agak lama untuk terbiasa karena Anda harus menggunakannya. Sebagian besar waktu Anda hanya ingin menerapkan menemukan dan mengganti ke seluruh fungsi termasuk argumen, tetapi itu cara yang bagus untuk tidak melakukan anti-pola "Kerjakan, sadarilah Anda seharusnya melakukannya dengan lebih baik, membatalkan dan mengulang benar."
sumber
Jika Anda tidak keberatan menekan kombinasi yang berbeda dari
cw
, maka saya yakin Anda bisa mendapatkan apa yang Anda inginkan dengan mudah, dengan menetapkan pintasan. Yang dapat Anda lakukan adalah menempatkan yang berikut inidalam
.vimrc
file Anda . Perhatikan bahwa itu^M
adalah kunci ambil kembali, dan bukan karakter^
danM
. Anda mendapatkannya dengan menekan Ctrl+ Vdalam mode insert diikuti oleh Enter. Sekarang, dengan ini didefinisikan, menekan<leader>a
akan melakukan hal yang samacw
, tetapi sekarang kata (sebelum perubahan) akan ada di "register pencarian terakhir" Anda (yaitu,/
register), jadi menekan nsetelah Anda melakukan perubahan dan kembali ke mode normal akan membawa Anda ke kejadian berikutnya. Demikian juga, menekan Nakan membawa Anda ke kejadian sebelumnya.Jalan pintas Anda tentu saja dapat memilih jalan pintas yang berbeda dari
<leader>a
, tetapi saya hanya menemukan bahwa ini adalah jalan pintas yang sangat mudah diakses. Secara pribadi saya telah menetapkan<leader>
untuk,
sehingga saya hanya perlu pers ,diikuti oleh a, tapi ini karena saya tidak menggunakan keyboard Amerika, sehingga saya \tersembunyi agak (saya percaya \adalah default<leader>
).Penjelasan Idenya sangat sederhana. Tarik kata di bawah kursor ke register pencarian
/
lalu lakukancw
. Begitulahnmap <leader>a "/yciw
yang saya tuju, tapi sayangnya saya tidak berpikir bahwa Anda dapat menarik ke register pencarian, jadi solusinya adalah untuk menarik kata di bawah kursor ke1
register, kemudian mengatur/
register sama dengan itu, dan kemudian lakukancw
. Jadi"1yiw
adalah bagian yang menarik kata dalam di bawah kursor ke register1
. Jika Anda tidak tahu kata-kata batiniah, Anda bisa melihatnya:help iw
. Setelah itu,:let @/=@1
diikuti dengan penangkapan Entermemasukkan isi1
register ke dalam/
. Pada titik ini ndanNberfungsi sebagai kemunculan kata di bawah kursor berikutnya dan sebelumnya, dan kemudianciw
dilakukan agar kata di bawah kursor dihapus dan Vim dimasukkan ke dalam mode penyisipan.kata versus kata dalam Saya baru menyadari bahwa saya berasumsi bahwa Anda menginginkan seluruh kata di bawah kursor, dan bukan hanya dari sudut kursor dan seterusnya. Inilah mengapa saya menggunakan
iw
bukannya diw
mana - mana. Jika ini bukan masalahnya, maka Anda harus menggunakansebagai gantinya. Jika kursor berada pada huruf pertama dari kata tersebut, tidak ada perbedaan.
disclaimer Solusi ini mungkin tidak akan bekerja dengan baik jika Anda mencoba untuk menggunakannya pada sesuatu yang mengandung hal-hal yang berbeda dari huruf, misalnya dengan memiliki berdiri kursor pada
\
atau dengan menggantiiw
denganiW
,ib
,is
atauip
atau sesuatu (meskipun saya tidak tahu mengapa Anda ingin fitur ini dengan seluruh kalimat)sumber