Jak wykonywać ruchy zgodnie z camelCase lub snake_case?

20

Powszechnie używa się camelCase lub snake_case do oddzielania wielu słów, które tworzą identyfikator. Byłoby miło, gdyby „słowo” ruchy ( b, w, e) by wykryć te granice wewnętrzne-identyfikator.

Jak można osiągnąć to zachowanie? (Plugin / vimrc / ...?)

Jaspis
źródło
1
Chciałbym też to wiedziećsnake_case
Martin Tournoij,
Możesz być w stanie zrobić coś z tym iskeywordustawieniem, ale obawiam się, że będzie to miało wiele dodatkowych skutków ubocznych ... (patrz :help word).
Martin Tournoij
@Carpetsmoker Myślałem, że to zadziała snake_case. Wydaje się, że tak nie jest, uwzględniono to w pytaniu.
Jasper
4
VimWiki cię obejmuje: vim.wikia.com/wiki/Moving_through_camel_case_words W pewnym momencie napiszę właściwą odpowiedź, jeśli ktoś inny mnie nie pobije.
Bogaty
Osobiście postrzegam słowo w formacie camalCase jako całe słowo i nie podoba mi się pomysł rozbicia go na pół ze względu na wielkość liter lub podkreślenie. Zwykle używam klawiszy fi tdo zarządzania wewnętrznymi ruchami słów.
Sukima,

Odpowiedzi:

11

Wtyczka CamelCaseMotion robi to, co chcesz. Domyślnie mapuje do klawiszy ,w, ,b, ,ektóre są równoważne do normy w, b, e. Działa zarówno dla CamelCase, jak i snake_case:

Przykład:

camelCaseWord

Używanie d,wusunie camel; ponowne użycie spowoduje usunięcie Case.

Lub w przypadku węża:

snake_case_word

d,wusunie snake_, a po raz drugi usunie case_.

Ruchy „wewnętrzne” (takie jak diw) powinny również działać zgodnie z oczekiwaniami (as di,w).

Jeśli wolisz, możesz także zmienić domyślne w, boraz ez:

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
źródło
2
Zauważ, że domyślne mapowania tej wtyczki przesłaniają ,polecenie (powtórz ostatni ruch f/ t/ F/ T), co oznacza, że ​​jeśli chcesz użyć tego polecenia, musisz poczekać na opóźnienie (skonfigurowane przez 'timeoutlen'). Na szczęście wtyczka umożliwia korzystanie z alternatywnych mapowań według własnego wyboru.
tommcdo,
Wydaje się, że niektóre skutki uboczne z tej wtyczki, to znaczy: dwna , key);kiedy kursor znajduje się kwydaje, aby usunąć cały wiersz (nowa linia), a ja po prostu oczekiwać key, aby być usunięte ...
Marcina, Tournoij
1
Uważam, że ta wtyczka jest lepsza. Łączenie ruchu z usuwaniem działa poprawnie i zatrzymuje się również w nawiasach.
Paschalis
Drobny punkt, ale w pierwszym przykładzie na pewno to usunie, camela potem Casenie Word?
prefer_anon