Kann ich ein interaktives: ersetzen (Suchen & Ersetzen)?
16
Manchmal verwende ich :seine komplizierte reguläre Ausdrucksweise, die möglicherweise nicht korrekt ist oder nicht sicher ist, ob ich alle Übereinstimmungen ersetzen möchte .
Kann ich Vim auf irgendeine Weise anweisen, jede gefundene Übereinstimmung zu bestätigen, bevor sie den Text tatsächlich ersetzt?
Die &incsearch( set incsearch) Einstellung in Vim ist wirklich nützlich. Sie können es zusammen mit einem nützlichen und wenig bekannten Trick verwenden.
Der Trick besteht darin, Ihren komplexen regulären Ausdruck mit dem Befehl /oder zu ?testen. Vim verwendet diese &incsearchEinstellung, um Übereinstimmungen interaktiv anzuzeigen. Sobald Sie mit dem regulären Ausdruck zufrieden sind, können Sie :%s//replacementvim die vorherige Suche verwenden lassen.
Beachten Sie, dass der Teil in //leer ist (hier setzen Sie den zu suchenden Text ein). Wenn Sie dieses Feld leer lassen, weisen Sie Vim an, den vorherigen regulären Suchtext zu verwenden. Mit diesem Befehl können Sie einen komplexen regulären Ausdruck mit /und mit allen Vorteilen von eingeben set incsearchund dann den %s//replacementBefehl verwenden, um das Suchen und Ersetzen tatsächlich auszuführen.
Wenn Sie nach :sBefehlen suchen möchten , sehen Sie sich vim-over an . Ich bevorzuge jedoch die native Vim-Methode.
Früher habe ich eine Variante davon verwendet: Benutze einfach :%s/pattern/replace/und drücke dann uzum Rückgängigmachen. Du kannst die Teile sehen, die Vim geändert hat, wenn du sie hlsearchaktiviert hast . Und Sie können diesen Text wieder durch ersetzen ^R.
Martin Tournoij
17
Ja! Verwenden Sie die cFlagge für :substitute. Von :help substitute:
[c] Confirm each substitution. Vim highlights the matching string (with
hl-IncSearch). You can type: :s_c
'y' to substitute this match
'l' to substitute this match and then quit ("last")
'n' to skip this match
<Esc> to quit substituting
'a' to substitute this and all remaining matches {not in Vi}
'q' to quit substituting {not in Vi}
CTRL-E to scroll the screen up {not in Vi, not available when
compiled without the +insert_expand feature}
CTRL-Y to scroll the screen down {not in Vi, not available when
compiled without the +insert_expand feature}
Die Beispielnutzung ist einfach:
%s/old/new/c
Dies ist sehr nützlich, wusste es aber erst vor 2 Wochen :-) Und es ist sogar in der alten Version erhältlich :-)
Bonus-Tipp: Möglicherweise möchten Sie auch verwenden :set nowrapscan; Dies verhindert, dass Vim nach oben umgebrochen wird, wenn es auf den Boden trifft. Ich habe festgestellt, dass dies besonders nützlich ist, wenn die cFlagge verwendet wird.
Dies ist ein sehr netter Trick, denn es ist: (1) interaktiv, (2) Sie können zum vorherigen Spiel gehen, wenn Sie es versehentlich übersprungen haben (etwas, das Sie nicht verwenden können :s/old/new/gc).
Ayrat
3
In Neovim gibt es auch die 'inccommand'Option, mit der Sie eine Vorschau des :sBefehlsergebnisses anzeigen können, während Sie es eingeben .
:%s/pattern/replace/
und drücke dannu
zum Rückgängigmachen. Du kannst die Teile sehen, die Vim geändert hat, wenn du siehlsearch
aktiviert hast . Und Sie können diesen Text wieder durch ersetzen^R
.Ja! Verwenden Sie die
c
Flagge für:substitute
. Von:help substitute
:Die Beispielnutzung ist einfach:
Dies ist sehr nützlich, wusste es aber erst vor 2 Wochen :-) Und es ist sogar in der alten Version erhältlich :-)
Bonus-Tipp: Möglicherweise möchten Sie auch verwenden
:set nowrapscan
; Dies verhindert, dass Vim nach oben umgebrochen wird, wenn es auf den Boden trifft. Ich habe festgestellt, dass dies besonders nützlich ist, wenn diec
Flagge verwendet wird.quelle
Meine bevorzugte interaktive Substitution ist die Suche mit /und das Durchlaufen der Übereinstimmungen mit n.
Wählen Sie dann Übereinstimmung mit gnund aus, sum den Text durch einen beliebigen Text zu ersetzen .
Und wiederholt , indem zum nächsten Spiel zu bewegen und drücken.
quelle
:s/old/new/gc
).In Neovim gibt es auch die
'inccommand'
Option, mit der Sie eine Vorschau des:s
Befehlsergebnisses anzeigen können, während Sie es eingeben .quelle
incsearch
Wurde in vim8 zum Wohle aller aktualisiert und zeigt jetzt auch die Vorschau, während Sie das Muster eingebenquelle