Wenn ich jedes Wort löschen möchte, ist das einfach, denn ich würde so etwas tun:
:s%/WORD//g
Aber was ist, wenn ich xyz
mit jedem Vorkommen von "WORD" verfahren möchte ? Angenommen, ich möchte jede Zeile löschen, die "WORD" enthält. Ich kann mir ein paar Möglichkeiten vorstellen, aber keine davon scheint ideal zu sein.
1)
/WORD
und drücken Sie dann manuell, ddnddnddnddn...
bis keine Vorkommen mehr vorhanden sind. Dies ist jedoch zeitaufwändig, wenn viele Leitungen vorhanden sind, um dies durchzuführen.
2)
qd/WORD<enter>ddq
und dann rate mal, wie oft WORD vorkommt, und dann zum Beispiel:
500@d
Aber dies wird entweder A) ein paar Zeilen verpassen oder B) ein paar zusätzliche Zeilen löschen.
Gibt es einen besseren Weg, dies zu tun?
500@d
wie Sie beschreiben, ist es eigentlich sicher. Die Makrowiedergabe stoppt, sobald der Suchbegriff nicht gefunden wird. Es wird also nur der Fehler "Muster nicht gefunden: WORT" angezeigt, nachdem alle Zeilen, die es enthalten, gelöscht wurden.Antworten:
Hierfür können Sie die Befehle
:global
und verwenden:normal
. Der:global
Befehl hat die folgende Syntax:Dies führt "Befehl" bei jedem Auftreten von "Muster" aus. Sie können dann den
:normal
Befehl verwenden, um bei jedem Auftreten eines Wortes mit eine Reihe von Tastenanschlägen auszuführen:global
. Wie so:Wenn diese Tastenanschläge spezielle Tasten wie enthalten
<Ctrl>
, können Sie sie:execute
wie folgt mit dem Befehl kombinieren :Beachten Sie, dass Sie vor jedem Auftreten eines Sonderschlüssels einen Backslash setzen müssen.
Weitere Informationen zu diesen Befehlen finden Sie unter
:help :normal
und:help :global
.quelle
Der Vollständigkeit halber können Sie verwenden
:substitute
, wenn Sie - in Ihrem Beispiel (löschen Sie die gesamte Zeile mit WORD) - die gesamte Zeile mit WORD übereinstimmen, z.Dies hat eine implizite "Übereinstimmung durch nichts ersetzen", dh es ist die kürzere Form von:
In Kombination mit
\zs
,\ze
,\(
-\)
(Gruppierung) und\=
(im Ersatzteil) mitsubmatch()
,:substitute
kann sehr mächtig sein.quelle
Es scheint, dass Sie suchen
:global
.quelle
:delete
und nicht der normale Betriebsmodusd
.:normal
. Und wenn Sie spezielle Schlüssel benötigen, benötigen Sie möglicherweise sogar:exe
-> `exe" normal aFooFar \ <esc> "