Bagaimana cara membuat gerakan menghormati camelCase atau snake_case?

20

Adalah umum untuk menggunakan camelCase atau snake_case untuk memisahkan beberapa kata yang membentuk pengidentifikasi. Akan lebih baik jika "kata" gerakan ( b, w, e) akan mendeteksi batas-batas dalam-identifier.

Bagaimana perilaku ini dapat dicapai? (Plugin / vimrc / ...?)

Jasper
sumber
1
Saya juga ingin tahu ini untuksnake_case
Martin Tournoij
Anda mungkin dapat melakukan sesuatu dengan iskeywordpengaturan, tetapi saya khawatir ini akan memiliki banyak efek samping tambahan ... (lihat :help word).
Martin Tournoij
@Carpetsmoker saya pikir itu berhasil snake_case. Tampaknya tidak, termasuk dalam quesiton.
Jasper
4
VimWiki membuat Anda meliput: vim.wikia.com/wiki/Moving_through_camel_case_words Saya akan menulis jawaban yang tepat di beberapa titik jika orang lain tidak mengalahkan saya untuk itu.
Kaya
Saya pribadi melihat kata camalCased sebagai keseluruhan kata dan tidak suka gagasan memecah setengah jalan menjadi sebuah kata karena case atau garis bawah. Biasanya saya menggunakan tombol fdan tuntuk mengatur gerakan kata dalam.
Sukima

Jawaban:

11

Plugin CamelCaseMotion melakukan apa yang Anda inginkan. Secara default peta ke tombol ,w, ,b, ,eyang setara dengan yang normal w, b, e. Ini berfungsi baik untuk CamelCase dan snake_case:

Contoh:

camelCaseWord

Menggunakan d,wakan menghapus camel; menggunakannya lagi akan menghapus Case.

Atau dengan case ular:

snake_case_word

d,wakan menghapus snake_, dan pada saat kedua akan dihapus case_.

Gerakan "dalam" (seperti diw) juga harus bekerja seperti yang diharapkan (seperti di,w).

Jika Anda suka, Anda juga bisa menimpa default w, bdan edengan:

map <silent> w <Plug>CamelCaseMotion_w
map <silent> b <Plug>CamelCaseMotion_b
map <silent> e <Plug>CamelCaseMotion_e
sunmap w
sunmap b
sunmap e
omap <silent> iw <Plug>CamelCaseMotion_iw
xmap <silent> iw <Plug>CamelCaseMotion_iw
omap <silent> ib <Plug>CamelCaseMotion_ib
xmap <silent> ib <Plug>CamelCaseMotion_ib
omap <silent> ie <Plug>CamelCaseMotion_ie
xmap <silent> ie <Plug>CamelCaseMotion_ie
Jarlax
sumber
2
Perhatikan bahwa pemetaan default plugin ini membayangi ,perintah (ulangi gerakan terakhir f/ t/ F/ T), artinya jika Anda ingin menggunakan perintah itu, Anda harus menunggu penundaan (dikonfigurasikan oleh 'timeoutlen'). Untungnya, plugin ini memungkinkan Anda untuk menggunakan pemetaan alternatif yang Anda pilih.
tommcdo
Tampaknya ada beberapa efek samping dengan plugin ini, yaitu: dwpada , key);saat kursor ktampaknya menghapus seluruh baris (termasuk baris baru), sementara saya berharap hanya keyakan dihapus ...
Martin Tournoij
1
Saya menemukan plugin ini menjadi lebih baik. Menggabungkan gerakan dengan penghapusan berfungsi dengan baik, dan berhenti di tanda kurung juga.
Paschalis
Poin kecil, tetapi dalam contoh pertama pasti akan menghapus cameldan kemudian Case, bukan Word?
prefer_anon