Wenn ich interaktiv nach einem Muster suche, bekomme ich jedes Mal, wenn ich n
drücke, das nächste Ergebnis. Wie lösche / ändere ich jedes Ergebnis, zu dem ich komme?
Idealerweise würde das, wonach ich suche, so funktionieren: Ich suche n
, um das Suchergebnis zu erhalten, und dann magic command
, um das Ergebnis im visuellen Modus hervorzuheben, und dann kann ich% co_de machen % oder d
, um den markierten Text zu löschen oder zu ändern.
Beispiel :
Ich gebe den Befehl
ein %Vor% und stimmt mit c
, einem Leerzeichen und einem beliebigen nachfolgenden Zeichen überein.
Also sagen wir, das erste Match, das es erreicht, ist "Hallo w".
Nun möchte ich alle hello
löschen, suche nach der nächsten Übereinstimmung (zB hello w
), ändere die nächste Übereinstimmung in hello a
und mache weiterhin verschiedene Dinge für jede Übereinstimmung.
Ich suche nicht nur nach Suchen und Ersetzen, denn ich möchte jede Aktion für jedes Ergebnis interaktiv ausführen können, z. B. das erste Ergebnis löschen, das zweite Ergebnis durch ersetzen hello there
, und ersetzen Sie das dritte Ergebnis durch bye
.
Um die gesamte Übereinstimmung der aktuellen Übereinstimmung auszuwählen (wenn Sie zu Beginn der Übereinstimmung sind), können Sie
eingeben %Vor%Um bis zum Ende des Matches zu löschen
%Vor%Um die Übereinstimmung zu ändern
%Vor% Nur negativ ist, dass Sie n
nicht verwenden können (da wird //e
wiederhergestellt) und stattdessen //
Ein typischer Workflow würde so aussehen
%Vor% Ich denke du willst gn
: (Gehe zum nächsten Spiel und wähle es im visuellen Modus aus. Sie können dies mit einem Befehl voranstellen, z. cgn
ändert die Übereinstimmung, dgn
löscht usw. Ich habe festgestellt, dass diese Übereinstimmung verwendet wird, wenn sie bereits auf einer Übereinstimmung liegt, damit dies geschehen sollte.
Ich würde tun, was ein früheres Poster vorgeschlagen hat: Konstruiere einen einzelnen Löschbefehl mit d target und drücke. nach der Verwendung von n, um jedes Vorkommen zu finden. In diesem Fall würde 7x
alles löschen, das mit hello .
übereinstimmt. Dies ist eine Abkürzungform von d7l
oder d7[space]
, da d einen beliebigen Bewegungsbefehl übernimmt.
Wenn Sie jedoch eine wirklich allgemeine Lösung zum Suchen und Löschen einer Regexp suchen, können Sie einen einzelnen Ersetzungsbefehl ausführen (selbst wenn dieser fehlschlägt) und dann Ihre Suche ausführen und & amp; die letzte Ersetzung der aktuellen Zeile erneut anwenden:
%Vor%Die erste Zeile (die Ersetzung) kann fehlschlagen. Sie können es immer noch mit & amp; später. Ich bin irgendwie überrascht, dass der erste Substitutionsbefehl nicht das Standardmuster setzt, aber vielleicht tut es in vi anders als vim.
Ändern Sie die erste, indem Sie cwfoo
esc oder was auch immer verwenden, und verwenden Sie dann den Befehl .
, um diese Änderung für jedes weitere Vorkommen zu wiederholen, das Sie ändern möchten.
Sie suchen nach "Bestätigen"
%Vor%: um in den ex-Modus zu wechseln,% um den ganzen Puffer zu übernehmen, s um ihn zu ersetzen, / hallo ./ um nach diesem regex zu suchen, // um ihn durch nichts zu ersetzen, g um nach allen Übereinstimmungen in einer Zeile zu suchen, und c, um zu bestätigen, ob vor jeder Übereinstimmung gelöscht werden soll.
Das geht davon aus, dass Sie nach Bestätigung suchen. Wenn du alles auf einmal machen willst, wurde es schon einige Male erwähnt.
%Vor%: um in den ex-Modus zu wechseln,% für den gesamten Puffer, s zum Ersetzen, / hallo ./ zum Suchen nach diesem regulären Ausdruck, // um es durch nichts zu ersetzen und g, um nach allen Übereinstimmungen in einer Zeile zu suchen
Drücken Sie die x-Taste.
oder Benutzer suchen und ersetzen: [esc] :%s/[search-regex]/[replace-regex]/g
Wenn replace-regex
leer ist, werden Sie löschen, was Sie gerade gesucht haben.
Wie wäre es mit Aufnahmen?
qa / textsearch HIT ENTER v9lvq
9 ist die (Länge der Textsuche - 1), d. h. 10 - 1 = 9
Wenn Sie nun die Aufnahme im Register 'a' vorbereitet haben, machen Sie @agv (@a: führt die Aufnahme mit dem Namen 'a' aus und gv wählt Ihren Suchtext aus.)
Jetzt können Sie mit dem ausgewählten Text alles machen. Wenn Sie fertig sind, können Sie mit dem nächsten Text fortfahren eins mit @@
hoffe das hilft ..
Tags und Links search vim keyboard-shortcuts replace