Tausche Text um Gleichheitszeichen

8

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. :)

    
J. Polfer 03.09.2009, 15:24
quelle

3 Antworten

22

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:

  1. längste mögliche Zeichenfolge, bestehend aus alles-aber-gleich-Vorzeichen, ausgedrückt durch [^=]* ...
  2. ... gefolgt von einem oder mehreren Leerzeichen, \s\+ (das zusätzliche \ vor + ist eine vim-Kuriosität)
  3. ... gefolgt von = und wieder beliebig viele Leerzeichen, =\s\+
  4. ... gefolgt von der längsten möglichen Folge von Nicht-Semikolon-Zeichen, [^;]*

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 .

    
Arkady 03.09.2009, 15:30
quelle
12

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

  • qq
    • Aufnahme im Register q starten
  • 0
    • gehe zum Zeilenanfang
  • "+ df =
    • lösche bis zum '=' und setze den Text in das '+' Register
  • x
    • löschen Sie zusätzlichen Speicherplatz
  • A
    • gehe zum Ende der Zeile und trage den Einfügemodus ein
  • <BACKSPACE> = <ESC>
    • Löschen Sie das Semikolon, fügen Sie ein Gleichheitszeichen und ein Leerzeichen ein
  • "+ p
    • fügen Sie den zuvor kopierten Test in das Register '+'
    • ein
  • xi; <ESC>
    • fügen Sie das abschließende Semikolon
    • ein
  • j
    • gehe zur nächsten Zeile, bereit, das Makro erneut anzuwenden
  • q
    • Stoppen Sie die Aufnahme
wxs 03.09.2009 16:12
quelle
4
%Vor%

sollte gut funktionieren.

    
user80168 03.09.2009 15:49
quelle

Tags und Links