Come fare in modo che i movimenti rispettino camelCase o snake_case?


20

È comune usare camelCase o snake_case per separare più parole che formano un identificatore. Sarebbe bello se i movimenti "parola" ( b, w, e) rileverebbero quei confini interno-identificatore.

Come si può ottenere questo comportamento? (Plugin / vimrc / ...?)


1
Mi piacerebbe saperlo anche persnake_case
Martin Tournoij,

Potresti essere in grado di fare qualcosa con l' iskeywordimpostazione, ma temo che questo avrà molti effetti collaterali aggiuntivi ... (vedi :help word).
Martin Tournoij,

@Carpetsmoker Ho pensato che funzionasse snake_case. Sembra che non lo sia, incluso nel quesiton.
Jasper,

4
VimWiki ti ha coperto: vim.wikia.com/wiki/Moving_through_camel_case_words Scriverò una risposta adeguata ad un certo punto se qualcun altro non me lo batte.
Ricco

Personalmente vedo una parola camalCased come una parola intera e non mi piace l'idea di dividere a metà una parola a causa di un caso o di un trattino basso. Di solito uso i tasti fe tper gestire i movimenti di parole interiori.
Sukima,

Risposte:


11

Il plugin CamelCaseMotion fa quello che vuoi. Di default le mappe ai tasti ,w, ,b, ,eche sono equivalenti alla normalità w, b, e. Funziona sia per CamelCase che per snake_case:

Esempio:

camelCaseWord

L'uso d,wrimuoverà camel; usarlo di nuovo rimuoverà Case.

O con custodia per serpenti:

snake_case_word

d,wverrà rimosso snake_e la seconda volta verrà rimosso case_.

Anche i movimenti "interni" (come diw) dovrebbero funzionare come previsto (come di,w).

Se si preferisce, si può anche ignorare l'impostazione predefinita w, be econ:

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

2
Si noti che i mapping predefiniti di questo plugin oscurano il ,comando (ripeti l'ultimo f/ t/ F/ Tmovimento), il che significa che se si desidera utilizzare quel comando, è necessario attendere un ritardo (configurato da 'timeoutlen'). Fortunatamente, il plug-in ti consente di utilizzare mappature alternative di tua scelta.
Tommaso

Sembra che ci siano alcuni effetti collaterali con questo plugin, vale a dire: dwil , key);quando il cursore si trova ksembra di rimuovere l'intera linea (tra cui a capo), mentre io aspettavo solo keydi essere rimosso ...
Martin Tournoij

1
Ho trovato questo plugin per essere migliore. La combinazione di movimento e cancellazione funziona correttamente e si ferma anche tra parentesi.
Paschalis,

Punto minore, ma nel primo esempio rimuoverà sicuramente camele poi Caseno Word?
favorite_anon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.