GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So finden und ersetzen Sie Text in Vim

Wie suchen Sie in Vim nach einem Text?

Drücken Sie die Taste / , geben Sie Ihren Suchtext ein und drücken Sie die Eingabetaste. Dies ist genau wie der Less-Befehl.

Aber diese Methode der Textsuche erlaubt Ihnen nicht, das gefundene Ergebnis zu ersetzen.

Lassen Sie mich Ihnen mitteilen, wie Sie in Vim suchen und ersetzen können .

:%s/foo/bar/gci

Der obige Befehl führt eine Suche ohne Berücksichtigung der Groß-/Kleinschreibung durch, um alle Vorkommen Ihres Suchbegriffs (foo) mit dem neuen Begriff (bar) zu finden. Mit dem Flag c fordert es zur Bestätigung auf, bevor eine Ersetzung ersetzt wird.

Lassen Sie mich ins Detail gehen und die Dinge klarer erklären.

Verwendung des Substitute-Befehls zum Suchen und Ersetzen von Text in Vim

Ich denke, Sie wissen bereits, dass Sie sich im normalen Modus (auch bekannt als Befehlsmodus) befinden müssen, um einen Befehl in Vim auszuführen. Drücken Sie die Esc-Taste, um in diesen Modus zu gelangen.

Vim hat einen praktischen Befehl :substitue , kann auch mit der kürzeren Version :s verwendet werden .

Unten ist die allgemeine Syntax des Ersatzbefehls:

:[range]s/{pattern}/{string}/[flags] [count]

Lassen Sie uns diese Syntax aufschlüsseln. Alles zwischen den eckigen Klammern '[]' ist optional.

  • range :Dieser Teil der Syntax kann verwendet werden, wenn Sie die Ersetzung zwischen den Zeilen wünschen. Wenn Sie keinen Bereich angeben, wird nur der Text in der aktuellen Zeile ersetzt . (Ich habe eine Tabelle für die Reichweite geteilt)
  • pattern :Hier geben Sie den Text an, den Sie ersetzen möchten.
  • string :Dies ist die Zeichenfolge, die das Muster ersetzen wird.
  • flags :Um alle Vorkommen des Suchmusters zu ersetzen, verwenden Sie den g Flagge. Sie können angeben, ob Groß- und Kleinschreibung bei der Übereinstimmung ignoriert werden sollen, indem Sie i verwenden Flagge. Um jeden Such- und Ersetzungsvorgang manuell zu bestätigen, verwenden Sie den c Flagge.
  • count :Anzahl der Zeilen, in denen Text ersetzt werden soll.
Bereich Beschreibung
. Aktuelle Zeile
$ Letzte Zeile
% Alle Zeilen
x Zeilennummer x
.,+x Von der aktuellen Zeile bis zu weiteren x Zeilen

Beispiele zum Suchen und Ersetzen in Vim

Lassen Sie uns ein paar Beispiele durchgehen, die die Verwendung des Ersatzbefehls in Vim demonstrieren.

Unten ist der Screenshot der Datei, die ich verwenden werde, um die Verwendung des Ersatzbefehls in Vim zu demonstrieren.

Einfache Textersetzung

Für dieses Beispiel habe ich darauf geachtet, dass der String 'Hallo' mehrmals in mindestens einer Zeile und mehrfach in der Datei vorkommt.

Ich möchte „Hallo“ durch die Zeichenfolge „HI“ ersetzen. Unten ist der Vim-Befehl, um das zu tun:

:%s/Hello/HI/g

Durch Bestätigung ersetzen

Um Text zu ersetzen, aber jedes Mal eine Bestätigung wünschen, können Sie den c verwenden im Ersatzbefehl.

:%s/Hello/HI/gc

Wie Sie dem Video entnehmen können, fragt mich Vim jedes Mal nach einer Bestätigung, bevor ein Muster ersetzt wird.

Sie haben auch eine Eingabeaufforderung, die wie die folgende Zeile aussieht:

replace with HI (y/n/a/q/l/^E/^Y)?

Die Optionen der Eingabeaufforderung haben folgende Bedeutung:

  • y:ja
  • n:nein
  • a:alle
  • q:Beenden ohne Ersetzen, aber es wird nicht rückgängig gemacht, wenn Sie bereits Text ersetzt haben
  • l:ersetzen Sie dies und beenden Sie (denken Sie an 'last')
  • ^E:Nach oben scrollen (funktioniert nicht in vim-tiny )
  • ^Y:Nach unten scrollen (funktioniert nicht in vim-tiny )

Ersetzung ohne Berücksichtigung der Groß-/Kleinschreibung

Wenn Sie Text ersetzen möchten, unabhängig davon, ob es sich um Groß- oder Kleinbuchstaben handelt, sollten Sie in diesem Fall (haha) das i verwenden Flag im Ersatzbefehl.

:%s/hello/HI/gi

Wie Sie bemerken, werden alle Vorkommen von „hello“ oder „Hello“ und sogar „hELLO“ durch „HI“ ersetzt. Dies ist eine Musterersetzung, bei der die Groß-/Kleinschreibung nicht berücksichtigt wird.

Jedes „Hallo“ wird durch „HI“ ersetzt, obwohl die meisten „Hallo“ ein großes „H“ enthalten.

Text in einer Zeile in Vim ersetzen

Um Text in einer einzelnen Zeile zu ersetzen, müssen wir den Bereich angeben, der den Umfang der Ersetzung auf die aktuelle Zeile begrenzt.

Verwenden Sie dafür besser den . Bereichsdeskriptor.

:.s/Hello/HI/g

Wie Sie sehen können, wurde nur das Muster in der ersten Zeile ersetzt, weil ich den Punkt '.' Bereichsdeskriptor.

Bonus-Tipp:Verwendung eines anderen Trennzeichens

Beim Betrachten der Syntax des Ersatzbefehls habe ich erwähnt, dass das Muster und die Zeichenfolge durch einen Schrägstrich '/' getrennt sind.

Aber was wäre, wenn Sie Text mit vielen Schrägstrichen im Muster/Zeichenfolge hätten, wie z. B. einen Pfad, der sich überall in der Datei wiederholt? Schrägstriche zu maskieren kann mühsam sein und manchmal leicht übersehen werden.

Anstatt den Schrägstrich als Trennzeichen zu verwenden, können Sie stattdessen ein anderes Trennzeichen verwenden.

Ein paar Trennzeichen, die ich gesehen habe, sind # , _ und @ .

Hier ist ein gif, das die Verwendung von @ demonstriert als Trennzeichen anstelle von / .

Schlussfolgerung

Das Ersetzen von Text kann häufig vorkommen, und Vim bietet Ihnen eine leistungsstarke Methode zum Suchen und Ersetzen von Mustern durch eine Zeichenfolge. Sie können sogar Regex in Vims Substitutionsbefehl mischen.

Wenn Sie daran interessiert sind, mehr als nur die Vim-Grundlagen zu lernen, empfehle ich dringend, dieses Programm von Jovica Ilic zu verwenden.


Linux
  1. So finden Sie die Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen

  2. So verwenden Sie den Grep-Befehl, um Text in Dateien zu finden

  3. Wie integriere ich den Mv-Befehl nach dem Find-Befehl?

  4. Vi- und Vim-Editor:12 leistungsstarke Beispiele zum Suchen und Ersetzen

  5. Linux-Befehl:Wie findet man nur Textdateien?

So suchen Sie, um ein Wort im Vim- oder Vi-Texteditor zu finden

So verwenden Sie sed zum Suchen und Ersetzen von Zeichenfolgen in Dateien

Wie man Markierungen verwendet und eine Textauswahl in Vim durchführt

So verwenden Sie den SED-Befehl zum Suchen und Ersetzen von Zeichenfolgen in Dateien

So suchen und ersetzen Sie Text, Wort oder Zeichenfolge in einer Datei

So verwenden Sie Sed zum Suchen und Ersetzen einer Zeichenfolge in einer Datei