2016-03-10 19 views
6

Ist es möglich, eine Datei nach dem Vorkommen eines bestimmten Wortes zu durchsuchen und den Benutzer um Eingabe zu bitten, dieses Wort durch zu ersetzen. Wiederholen Sie das Gleiche noch einmal, indem Sie entweder einen neuen Ersatz eingeben oder etwas aus Ihrem Verlauf verwenden, bis alle Wörter ersetzt sind oder der Benutzer den Vorgang beendet hat. Denken Sie daran, dass ich die Möglichkeit haben möchte, Wörter zu überspringen, die ich nicht ersetzen möchte.VIM alle Vorkommen finden und durch Eingabe ersetzen

Gerade

:%s/value_one/value_two/gc 

mit bedeuten würde ich für jeden unterschiedlichen Ersatz diesen Befehl auszuführen habe ich im Sinn haben. Ist das möglich oder stimmt etwas mit diesem Workflow nicht? Ich würde dies beim Einfügen von Boilerplate-Code verwenden, die nur eine Variable benötigt, um geändert zu werden.

Antwort

12

Sie suchen:

%s/value_one/\=input('replace <'.submatch(0).'> with: ')/gc 

:h :s\= und :h input(). Sie sollten in der Lage sein, einen Standardwert für die Eingabe anzugeben, wenn Sie dies wünschen.

+0

Arbeitete wie ein Charme. Genau das, was ich gesucht habe! – ExcellentAverage

+0

Ich könnte falsch liegen, aber sollte es nicht sein:% s/value_one/\ = input ('ersetzen <'. Submatch (0). '> Mit:')/gc. Doppelter Schrägstrich nach value_one gibt mir 'E488: Trailing characters'. – ExcellentAverage

+0

Ja, in der Tat. Du hast recht! Fest! –

3

Dies könnte nicht die perfekte sein, nur teilen, was ich verwendet habe.

Dies setzt voraus, dass :set hl bereits festgelegt ist. Drücken Sie * würde nach dem Wort unter dem Cursor suchen. Bringe den Cursor zu deinem Wort. Aber ich verwende normalerweise gd anstelle von *.

Dann ändern Sie es mit ciw zu Ersatzwort. Dann Esc. Wir können jetzt zum nächsten Vorkommen gehen durch n.

Wenn dies auf dasselbe Wort geändert werden muss, wird dies durch Drücken von . ausgeführt. Wenn nicht, können Sie durch erneutes Verwenden von ciw zum neuen Wert wechseln.

Wenn Sie das nächste Vorkommen nicht ändern möchten, überspringen Sie es einfach, indem Sie n drücken, was zum nächsten Vorkommen führt.

Dies scheint wenig manuell, aber das gibt eine konservative Kontrolle über meine Bearbeitung.

+0

Danke für die Antwort. Ich bevorzuge die Antwort von Luc Hermitte, weil es meiner Meinung nach etwas eleganter ist. Danke für die Mühe aber – ExcellentAverage

+0

Absolut, kein Problem. Ich auch – dlmeetei

+1

Sie können auch die "gn" Bewegung verwenden. z. B. 'cgn', dann' .', um zu wiederholen (No 'n'!). Für weitere Hilfe siehe ': h gn 'und diese Vimcasts-Episode: [Bei Suchtreffern mit gn] (http://vimcasts.org/episodes/operating-on-search-matches-using-gn/) –

Verwandte Themen