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.

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

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.