Ich verwende oft extrem lange Makros, wenn ich mich mit wiederholten Bearbeitungen und Umgestaltungen befasse. Wann immer möglich, schreibe ich diese als Ex-Modus-Befehle, anstatt sie als Makros aufzuzeichnen, da sie auf diese Weise (mit dem Befehlsfenster) einfacher interaktiv bearbeitet werden können.
Manchmal muss ich jedoch ein paar Befehle im normalen Modus hinzufügen, z. B. um nur einen Teil einer Zeile und nicht eine ganze Zeile für die spätere Verwendung in meinem Makro zu ziehen oder um Text so auszurichten, wie ich es möchte.
Gibt es eine Möglichkeit, einen Befehl im Ex-Modus fortzusetzen, nachdem er norm
enthalten ist?
(Für ein aktuelles Beispiel der Art von Komplexität, von der ich spreche :)
:'a+s/\_^\s*\(\S*\)::\_[^>]*>\s*\("[^"]*"\)\s*;\_s*\_$/ "\1", \2,/ | m 'a- | norm f,50a ^[d44|
Gibt es eine Möglichkeit, am Ende mehr Text hinzuzufügen und als Ex-Modus-Befehl ausführen zu lassen?
quelle
:normal
Befehl den Rest der Zeile belegt? Wenn ja, können Sie es in eine Zeichenfolge einschließen, die Sie mit dem folgenden:execute
Befehl ausführen können ::exe 'norm f,50a ^[d44|' | other Ex command
.:execute
Übergibt die Zeichenfolge nur als Argument an:normal
, sodass letztere nicht sieht, was in der Befehlszeile folgt, sodass Sie weitere Ex-Befehle hinzufügen können. Es gibt nur eine Sache , die man beachten muss, wenn die Zeichenfolge wie nicht wörtliche Steuerzeichen enthält\e
für<Esc>
Sie doppelte Anführungszeichen verwenden Vim zu ermöglichen , sie zu interpretieren, sonst Apostrophe die Interpretation von irgendetwas in der Zeichenfolge zu verhindern.Antworten:
Wenn Sie eine Folge von Tastenanschlägen haben, die Sie im normalen Modus über die Befehlszeile ausführen möchten, können Sie den
:normal
Befehl verwenden.Standardmäßig kann dem
:normal
Befehl jedoch kein anderer Befehl folgen, da in der Hilfe Folgendes angegeben ist:Wenn Sie also nachher einen weiteren Ex-Befehl hinzufügen möchten
:normal
, können Sie den gesamten:normal
Befehl in eine Zeichenfolge einschließen und den:execute
Befehl dann dazu bringen , diesen auszuführen. Es könnte etwas geben wie:Im Gegensatz zu dem
:normal
,:execute
das Rohr als Teil ihres Arguments nicht in Betracht ziehen. Es wird als Befehlsbeendigung betrachtet und nur das ausgeführt, was sich in der Zeichenfolge befindet.:normal
In der Befehlszeile wird nicht angezeigt, was danach steht. Es wird nur angezeigt, was in der Zeichenfolge übrig bleibt.Daher sollten Sie in der Lage sein, anschließend einen weiteren Ex-Befehl hinzuzufügen, ohne
:normal
ihn im normalen Modus einzugeben.Es ist nur eine kleine Sache , die man beachten muss:
wenn Sie Ihren String mit einfachen Anführungszeichen umgeben, Vim wird nichts darin interpretieren, was ein Problem sein kann , wenn Sie möchten ,
:normal
Steuerzeichen treffen wie<Esc>
,<CR>
,<Tab>
oder<C-V>
von Sonderzeichen zu schreiben, jeweils:\e
,\r
,\t
und\<C-V>
.Diese Sonderzeichen sind in beschrieben
:help expr-quote
.In diesem Fall können Sie doppelte Zeichenfolgen anstelle von einfachen Anführungszeichen verwenden, um die Zeichenfolge zu umgeben, damit Vim sie korrekt interpretieren kann.
Wenn Ihre Steuerzeichen wörtlich sind (dh wenn Sie ihre Caret-Notation sehen:
^[
für Escape,^M
für Enter,^I
für Tab,^V
für<C-V>
) sollten Sie keine doppelten Anführungszeichen benötigen.Wenn Sie ein Makro aufzeichnen, speichert dieses Ihre Steuerzeichen als wörtliche Zeichen. Es werden nicht die in beschriebenen Sonderzeichen verwendet
:h expr-quote
, sodass Sie keine doppelten Anführungszeichen benötigen sollten. Wenn Sie ein Makro bearbeiten möchten, indem Sie selbst ein Literal-Steuerzeichen hinzufügen, können Sie ihm ein Präfix voranstellen<C-V>
(siehe:h i_ctrl-v
weitere Informationen). Wenn Sie beispielsweise ein Literal-Escape in das Register einfügen möchten, in dem Ihr Makro gespeichert ist, oder in die Folge von Tastenanschlägen, an die als Argument übergeben wird,:normal
können Sie drücken<C-V><Esc>
.quelle