Wie macht man Bewegungen, die camelCase oder snake_case respektieren?

20

Es ist üblich, mehrere Wörter, die einen Bezeichner bilden, mit camelCase oder snake_case zu trennen. Es wäre schön, wenn die „Wort“ Bewegungen ( b, w, e) würden diese innere Kennung Grenzen erkennen.

Wie kann dieses Verhalten erreicht werden? (Plugin / vimrc / ...?)

Jaspis
quelle
1
Ich würde das auch gerne wissen fürsnake_case
Martin Tournoij 10.02.15
Möglicherweise können Sie mit der iskeywordEinstellung etwas anfangen, aber ich befürchte, dass dies viele zusätzliche Nebenwirkungen haben wird ... (siehe :help word).
Martin Tournoij
@Carpetsmoker Ich dachte, dass es funktioniert snake_case. Scheint nicht der Fall zu sein, hat es in die Frage aufgenommen.
Jasper
4
Mit VimWiki sind Sie bestens vertraut : vim.wikia.com/wiki/Moving_through_camel_case_words Ich schreibe irgendwann eine richtige Antwort, wenn mich jemand anderes nicht schlägt.
Rich
Ich persönlich betrachte ein Wort in CamalCased als ein ganzes Wort und mag es nicht, aufgrund von Groß- und Kleinschreibung in ein Wort zu zerfallen. Normalerweise verwende ich die Tasten fund t, um innere Wortbewegungen zu verwalten.
Sukima,

Antworten:

11

Das Plugin CamelCaseMotion macht was Sie wollen. Standardmäßig ordnet sie die Tasten ,w, ,b, ,edie den normalen gleichwertig sind w, b, e. Es funktioniert sowohl für CamelCase als auch für snake_case:

Beispiel:

camelCaseWord

Mit d,wwird entfernt camel; Wenn Sie es erneut verwenden, wird es entfernt Case.

Oder mit Schlangenetui:

snake_case_word

d,wwird entfernt snake_, und beim zweiten Mal wird es entfernt case_.

"Innere" Bewegungen (wie diw) sollten auch wie erwartet (wie di,w) funktionieren .

Wenn Sie möchten, können Sie auch die Standardeinstellung überschreiben w, bund emit:

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
quelle
2
Beachten Sie, dass diese Standard - Mappings der Schatten des Plug - Ins ,Befehl (Wiederholung letzte f/ t/ F/ TBewegung), was bedeutet , wenn Sie diesen Befehl verwenden möchten, werden Sie für eine Verzögerung warten (konfiguriert durch 'timeoutlen'). Glücklicherweise können Sie mit dem Plugin alternative Zuordnungen Ihrer Wahl verwenden.
tommcdo
Es scheinen einige Nebenwirkungen , die mit diesem Plugin zu sein, das heißt: dwauf , , key);wenn der Cursor an ist kscheint die gesamte Zeile (einschließlich Newline) zu entfernen, während ich erwartet hatte nur keyentfernt werden ...
Martin Tournoij
1
Ich fand dieses Plugin besser. Das Kombinieren von Bewegung mit Löschen funktioniert ordnungsgemäß und endet auch in Klammern.
Paschalis
Kleiner Punkt, aber im ersten Beispiel würde es sicherlich entfernen camelund dann Casenicht Word?
preferred_anon