Wie ändere ich bis zum nächsten Unterstrich in VIm?

60

Wenn ich diesen Text in vim habe und der Cursor auf dem ersten Zeichen steht:

www.foo.com

Ich weiß, dass ich Folgendes kann:

  • cwbis zum ersten Punkt zu ändern, da ein word(Kleinbuchstabe w) an einer Interpunktion ODER einem Leerzeichen endet
  • cWdie ganze Adresse zu ändern, weil ein Word(Großbuchstabe w) nur mit Leerzeichen endet

Was ist, wenn ich das habe:

stupid_method_name

und wollen das ändern?

awesome_method_name

Beides cwund cWdas Ganze ändern, aber ich möchte nur das Fragment vor dem Unterstrich ändern.

Meine Fallback-Technik c/_bedeutet "Ändern, bis Sie den nächsten Unterstrich in einer Suche treffen", aber für mich bedeutet dies auch, dass alle Unterstriche als Suchbegriffe hervorgehoben werden, was etwas ärgerlich ist.

Gibt es einen Bezeichner wie woder Wder keine Unterstriche enthält?

Nathan Long
quelle
Was ist los mit :nohl?
Ignacio Vazquez-Abrams
Ich möchte, dass Suchbegriffe die meiste Zeit hervorgehoben werden. nur nicht, wenn ich suche als bewegung. (Ich habe auch gerade diese Frage gestellt: superuser.com/questions/244042/… )
Nathan Long

Antworten:

82

Sie können es tun cf_. f hebt das gesuchte Zeichen nicht hervor.

Sie können dies auch tun, ct_wenn Sie das _ nicht einschließen möchten.

Doppelgesicht
quelle
15
Sie verwechseln f, t, F und T. gehen fweiter zum Charakter. Fbewegt sich rückwärts zum Charakter; tbewegt sich vorwärts bis kurz vor den Charakter; und Tbewegt sich rückwärts zu dem Zeichen rechts neben dem Zielzeichen. Also sollte Ihr zweites Beispiel gewesen sein ct_.
Garyjohn
2
Jetzt ist meine Antwort korrigiert. Entschuldigung und danke.
Doubleface
4
ct_ist genau das, was ich wollte. Dies ist jetzt Teil meines regulären Arbeitsablaufs geworden. Vielen Dank!
Nathan Long
1
Dies ist auch unglaublich erweiterbar und daher leistungsstark. Ich vermute, Sie können jedes Zeichen nach f oder t setzen, und es wird zum nächsten (oder vorherigen) Vorkommen weitergeleitet. Vielen Dank.
Dom
2
Vim scheitert nie, nur das eigene Verständnis dessen, wozu es fähig ist!
Benjamin R
64

Fügen Sie dies in Ihre .vimrc ein:

set iskeyword-=_

Dann wird _ als Wortgrenze behandelt (obwohl keine WORD-Grenze), und cw könnte verwendet werden, um nur "awesome" zu ändern, und cW, um das Ganze zu ändern.

Sehen:

:help iskeyword

und

:help word

Für mehr Information.

schäbig
quelle
6
Es ist toll zu wissen, dass ich meine eigenen Wortgrenzen definieren kann, aber nach einigem Überlegen denke ich, dass die beste Lösung ct_das Doubleface ist.
Nathan Long
Dies ist mein persönlicher Favorit
Jay
2
Ich mag dieses, aber es bricht meine Syntax-Farbcodierung in PHP.
Aaron Surrain
Wie kann ich dies deaktivieren oder umschalten?
Behe
1

camelcasemotion ist ein ziemlich praktisches vim-Plugin, mit dem Sie sich durch Wörter bewegen können, wenn Sie die Unterstreichungs- oder Kamelfallnotation verwenden. Mit diesem Plugin können Sie ein Komma vor viele der herkömmlichen vim motion-Befehle setzen, mit denen Sie Wörter in Unterstrich- oder Kamelfallnotation als vollständige Wörter behandeln können.

Jdoherty
quelle