Wie ändere ich selektiv eine hervorgehobene Zeichenfolge?

11

Durch die Suche habe ich die Zeichenfolge hervorgehoben, die ich ändern möchte. Jetzt möchte ich nur den markierten Text ersetzen. Ich verwende n, um zur nächsten Instanz der Suchzeichenfolge zu gelangen. Ich dachte, ich könnte so etwas tun, ciwaber das ändert das ganze Wort, nicht nur den hervorgehobenen Text.

Ich bin vertraut mit, :%s/old/new/gaber ich möchte nicht alle Instanzen ändern. Stattdessen möchte ich meinen Cursor auf jede Instanz bewegen und dann entscheiden, ob ich sie ändern möchte.

Zundarz
quelle

Antworten:

16

Verwenden Sie die gnBewegung, um die aktuelle Suchübereinstimmung zu bearbeiten. Im folgenden Beispiel wird die aktuelle Übereinstimmung in "FooBar" geändert:

cgnFooBar

Das Tolle an dieser Technik ist, dass Sie die Änderung über wiederholen können .. Angenommen, das nächste Spiel wird auf dieselbe Weise geändert, wie Sie es nur .zum Wiederholen verwenden können. Oder überspringen Sie ein paar Übereinstimmungen über nund verwenden Sie dann ..

Vimcasts hat eine nette Episode zu diesem Thema: Arbeiten mit Suchmatches mit gn

Weitere Hilfe finden Sie unter:

:h gn
Peter Rincker
quelle
Dies ist definitiv der richtige Weg, wenn Sie verschiedene Ersatzzeichenfolgen haben, die Sie an verschiedenen Stellen verwenden müssen. Ich bin mir nicht sicher über die Nuancen des visuellen Modus, die von aufgerufen zu werden scheinen gn, also hier ist eine ähnliche Methode, die ich gerade entdeckt habe:c//e<CR>FooBar<Esc>//<CR>
Jeff
Gibt es eine Möglichkeit, alle Auswahlen / Übereinstimmungen gleichzeitig zu ändern? Grundsätzlich umzugestalten?
Geremia
@Geremia, ja, :%s/oldtext/newstuff/gändert alle Übereinstimmungen von oldtextbis newstuff.
Zundarz
@zundarz Ich möchte keinen regulären Ausdruck machen, sondern nur Variablennamen ersetzen. Anstatt .mehrmals zu schlagen , kann ich :%norm .( Quelle ) verwenden.
Geremia
7

Wenn Sie bereits mit /wordoder nach einem Wort gesucht haben ?word.

Sie können :%s//newword/gcdas zuvor gesuchte Wort durch ersetzen newword, indem Sie den Suchbegriff ( s//..) leer lassen.

Das cFlag sagt, dass jede Änderung bestätigt werden sollte, indem Sie yauf Ja oder nNein drücken .

Schauen Sie sich :help :s_flagsfür weitere Informationen über die confirm Flagge.

Raphael Ahrens
quelle
1
Ich weiß, dass Sie gesagt haben, Sie sollen sich die Hilfe ansehen, aber Sie können auch ausdrücklich erwähnen, dass Sie auch drücken lkönnen a, und q(oder <Esc>) für verschiedene Möglichkeiten, den Bestätigungszyklus abzuschließen.
Jeff
2

Methode 1

Sie können die gnund gNZuordnungen nutzen, um das zu erreichen, was Sie wollen. gnsucht vorwärts nach dem zuletzt verwendeten Suchbegriff und wählt die Übereinstimmung visuell aus. gNmacht genau das gleiche, außer dass es rückwärts sucht. In Kombination mit einem Operator wie z. B. cwird der Operator auf die Übereinstimmung angewendet. Wenn Ihre letzte Suchzeichenfolge beispielsweise "foo" lautet und Sie eingeben cgn, wird vorwärts nach der nächsten Instanz von "foo" gesucht, gelöscht und Versetzen Sie Sie in den Einfügemodus, um den Ersatztext einzugeben.

Weitere Informationen hierzu finden Sie unter :help gnund :help gN.

Methode 2

Sie können den :substituteBefehl mit dem cFlag verwenden. Dadurch werden Sie aufgefordert, jede Ersetzung zu bestätigen. Angenommen, Sie möchten foo in der gesamten Datei durch bar ersetzen, aber jedes Ersetzen bestätigen:

:%s/foo/bar/gc

Weitere Informationen hierzu finden Sie in folgenden Hilfethemen: :help :s_flags, :help cmdline-ranges, und :help :substitute.

Immergrüner Baum
quelle