Gibt es in Vim / Vi Befehle zum Verschieben innerhalb eines ausgewählten Suchsegments?
Wenn ich beispielsweise nach einem Wort suche, gibt es Befehle, um den Cursor an das Ende des hervorgehobenen Segments zu bewegen? Angenommen, ich habe ein Wort, "FishTaco", und ich möchte nach allen Instanzen von "Fish" suchen und danach etwas einfügen. Ich weiß, dass ich einen globalen Ersatz durchführen kann, aber was ist, wenn ich die Änderung nur in einigen nicht sequentiellen Instanzen vornehmen möchte?
Ich konnte sehen, wo es bequem wäre, den Cursor an das Ende des aktuell hervorgehobenen Segments zu bewegen, um eine Aktion auszuführen.
Fish
durch zu ersetzenFishTaco
, können Sie dies tun:%s/Fish\(Taco\)\@!/&Taco/
, indem Sie alleFish
nicht bereits gefolgt findenTaco
und durch ersetzenFishTaco
. Kombiniert eine Suche mit negativem Lookahead mit einer Ersetzung, die den übereinstimmenden Begriff gefolgt von enthältTaco
.Antworten:
Sie können es damit machen:
/Fish/e
Am
/e
Ende steht der Cursor am Ende des Suchbereichs (standardmäßig anstelle des ersten Zeichens).quelle
/Fish
Suche bereits durchgeführt haben, mit//e
und von Vim 7.4 zum Ende springen könnengn
, um das gefundene Ergebnis visuell hervorzuheben.Wenn Sie Ihren Cursor nur nach dem letzten Zeichen von Fish platzieren möchten, können Sie verwenden
Dadurch wird der Cursor nach dem h gesetzt. (Ohne das wird
+1
der Cursor links vom letzten Zeichen angezeigt.)Wenn Sie besonders daran interessiert sind, den Cursor nach Fish zu platzieren, aber nur, wenn er in "FishTaco" angezeigt wird, können Sie eine der folgenden Optionen ausprobieren:
Sie können verwenden
und Ihr Cursor landet zwischen Fish und Taco. Der
/s+4
Cursor wird 4 Stellen nach dem Start des Suchbegriffs platziert.Sie könnten auch verwenden
Dadurch wird der Cursor 3 Stellen links von der linken Seite des letzten (End-) Zeichens platziert.
Sie können auch verwenden
weil
/b+4
wird behandelt als/s+4
.quelle
Wenn Sie bereits gesucht haben
/Fish
, können Sie die Suche schnell ändern, um zum Ende des Spiels über zu gelangen.//e
Dies wiederholt die letzte Suche, fügt jedoch dene
bereits erläuterten Modifikator hinzu.quelle
/ long-regexp1 \zs long-regexp2 /
Der Cursor stoppt bei \ zs , siehe: help \ zsquelle
Sobald Sie eine visuelle Auswahl getroffen haben, können Sie
o
die Cursorposition zwischen dem Anfang und dem Ende des ausgewählten Blocks umschalten. Bei der Auswahl zeilenweise schaltet dies die Linie Position, bewegt sich der Cursor zum Starten und Beenden Zeile der Auswahl bedeutet aber nicht zum Starten oder Beenden Charakter. Wenn die Auswahl zeichenweise ist, ist die Bewegung auch zeichenweise.Sie können auch verwenden ,
`<
und`>
den Cursor zwischen Anfang und Ende des visuellen Block zu wechseln, was jedoch selbst die Auswahl betrifft, so ist es verwendet wird , zurückgesetzt oder die Auswahlgrenzen einzustellen.Bearbeiten: Ah, aber für Suchhighlights funktioniert dies nicht, da eine
o
Zeileneinfügung eingeleitet wird. Ich denke, das Suchhighlight ist nicht dasselbe wie eine visuelle Auswahl, sorry :)quelle
Der Teil "Cursor am Ende des Spiels" Ihrer Frage ist bereits beantwortet.
Das kannst du machen
:%s/Fish/FishTaco/c
. Dies gibt Ihnen die Möglichkeit, jede Ersetzung zu bestätigen oder abzulehnen und das gesamte Geschäft "Cursor am Ende des Spiels" zu überspringen.quelle
y
odern
so weiter, bis keine Übereinstimmungen mehr vorhanden sind. Um alle weiteren Ersetzungen zu akzeptierena
, geben Sie ein, um sie abzulehnen, geben Sie einq
.g
nach dem Finale,/
so dass es in meiner Linie nicht weiterging. Danke für den Tipp.