Bagaimana saya mengubah sampai garis bawah berikutnya dalam VIm?

60

Jika saya memiliki teks ini dalam vim, dan kursor saya adalah karakter pertama:

www.foo.com

Saya tahu bahwa saya dapat melakukan:

  • cwuntuk mengubah hingga periode pertama, karena word(huruf kecil w) berakhir pada tanda baca atau spasi putih
  • cWuntuk mengubah seluruh alamat, karena a Word(huruf besar) berakhir hanya di spasi putih

Sekarang, bagaimana jika saya memiliki ini:

stupid_method_name

dan ingin mengubahnya menjadi ini?

awesome_method_name

Keduanya cwdan cWmengubah semuanya, tapi saya hanya ingin mengubah bagian sebelum garis bawah.

Teknik fallback saya adalah c/_, yang berarti 'berubah sampai Anda mencapai garis bawah berikutnya dalam pencarian,' tetapi bagi saya, itu juga menyebabkan semua garis bawah disorot sebagai istilah pencarian, yang sedikit mengganggu.

Apakah ada specifier seperti watau Wyang tidak termasuk garis bawah?

Nathan Long
sumber
Ada apa dengan ini :nohl?
Ignacio Vazquez-Abrams
Saya melakukan ingin istilah pencarian untuk disorot sebagian besar waktu; tidak ketika saya menggunakan pencarian sebagai gerakan. (Saya juga baru saja menanyakan pertanyaan ini: superuser.com/questions/244042/… )
Nathan Long

Jawaban:

82

Anda bisa melakukannya cf_. f tidak akan menyorot karakter yang dicari.

Anda juga dapat melakukannya ct_jika Anda tidak ingin menyertakan _.

bermuka dua
sumber
15
Anda membingungkan f, t, F dan T. fbergerak maju ke karakter; Fbergerak mundur ke karakter; tbergerak maju tepat sebelum karakter; dan Tbergerak mundur ke karakter di sebelah kanan karakter target. Jadi contoh kedua Anda seharusnya ct_.
garyjohn
2
Sekarang jawaban saya terkoreksi. Maaf dan terima kasih
doubleface
4
ct_persis apa yang saya inginkan. Ini sekarang telah menjadi bagian dari alur kerja reguler saya. Terima kasih!
Nathan Long
1
Ini juga sangat dapat diperpanjang dan karena itu kuat. Saya kira Anda dapat menempatkan karakter apa pun setelah f atau t dan itu akan pergi ke kejadian berikutnya (atau sebelumnya untuk topi). Terima kasih.
Dom
2
Vim tidak pernah gagal, hanya pemahaman seseorang tentang apa yang mampu dilakukannya!
Benjamin R
64

Letakkan ini di .vimrc Anda:

set iskeyword-=_

Kemudian _ akan diperlakukan sebagai batas kata (meskipun bukan batas WORD), dan cw dapat digunakan untuk hanya mengubah "luar biasa", dan cW untuk mengubah semuanya.

Lihat:

:help iskeyword

dan

:help word

untuk info lebih lanjut.

luar biasa
sumber
6
Sangat menyenangkan mengetahui bahwa saya dapat mendefinisikan batas kata saya sendiri, tetapi setelah beberapa pemikiran, saya pikir solusi terbaik adalah ct_seperti kata ganda di bawah ini, karena singkat dan merupakan perilaku vim standar.
Nathan Long
Ini adalah favorit pribadi saya
Jay
2
Saya suka yang ini, tapi itu merusak kode warna sintaks saya di php.
Aaron Surrain
Bagaimana saya bisa menghapus atau mengaktifkan ini?
Behe
1

camelcasemotion adalah plugin vim yang cukup praktis yang memungkinkan Anda menelusuri kata-kata saat menggunakan notasi garis bawah atau camelcase. Menggunakan plugin ini Anda dapat menempatkan koma di depan banyak perintah gerakan vim tradisional yang akan memungkinkan Anda untuk memperlakukan kata-kata dalam garis bawah atau notasi camelcase sebagai kata-kata penuh.

Jdoherty
sumber