Gibt es eine einfache Möglichkeit, Code um ein Gleichheitszeichen in vi / vim umzukehren?
ZB: Ich möchte das drehen:
%Vor%hinein:
%Vor%auf VIEL Zeilen in einer Datei.
Ich weiß, das scheint ein wenig trivial zu sein, aber ich habe in der Vergangenheit schon viele Fälle mit der Programmierung von Programmen durchkämmt, und ich hatte nie eine gute Idee / Methode, dies zu tun brauchte nicht viel in vim zu schreiben oder ein awk-Skript zu schreiben. Ich würde denken, dass dies über einen einzigen Liner in vi möglich wäre.
Die Erklärungen zu den Einzeilern sind sehr willkommen und werden sehr geschätzt, wenn ich meine angenommene Antwort auswähle. :)
In etwa so:
%Vor%Sie müssen möglicherweise etwas damit herumspielen, wenn Sie komplexeren Code haben als das, was Sie im Beispiel gezeigt haben.
BEARBEITEN: Erklärung
Wir verwenden den Befehl s/
finden /
ersetzen . Der find Teil bringt uns folgendes:
[^=]*
... \s\+
(das zusätzliche \
vor +
ist eine vim-Kuriosität) =
und wieder beliebig viele Leerzeichen, =\s\+
[^;]*
Dann werfen wir ein paar einfangende Klammern ein, um die Sachen zu speichern, die wir brauchen, um den Ersatzstring zu konstruieren, das ist der \(
Stoff \)
Syntax
Und schließlich verwenden wir die erfassten Zeichenfolgen im ersetzen Teil des Befehls s/
finden /
ersetzen : das ist und
.
Um des Interesses willen, hier ist, wie ich es als ein aufgezeichnetes Makro gemacht habe:
%Vor%Wenn Sie das in der ersten Zeile ausführen, wird das Makro "q" für die erforderlichen Aktionen festgelegt. Dann können Sie das Makro in jeder folgenden Zeile ausführen, indem Sie Folgendes eingeben:
%Vor%oder, sagen Sie, dass Sie das Makro auf die nächsten 10 Zeilen anwenden möchten:
%Vor%Ich finde Makros für einen schnellen Wechsel immer einfacher, als die Regex herauszufinden, weil sie im Wesentlichen eine Erweiterung sind, wie ich es von Hand machen würde.
Bearbeiten : Dan Olson weist in seinem Kommentar darauf hin, dass Sie Folgendes eingeben können, wenn Sie das Makro dann auf eine Reihe von Linien anwenden möchten, z. B. auf die Zeilen 6-100. Ich weiß nicht, ob es eine prägnantere Syntax gibt, die kein ". *" - Muster erfordert.
%Vor%Erklärung des Makros
<BACKSPACE>
= <ESC>
<ESC>