Manchmal muss ich ersetzen .
mit , ->
wenn der Code zu fixieren.
Normalerweise kann Suchen und Ersetzen nicht verwendet werden, da es viele (Hunderte von) Punkten ( .
) gibt und nur einige von ihnen geändert werden müssen.
Allerdings habe ich die , die finden, die geändert werden müssen , wenn ich durch ein Make werde Änderungsliste .
Die Verwendung des Wiederholungsoperators funktioniert nicht ganz, denn wenn ich eine Instanz ändere und dann mit dem Punktbefehl wiederhole, erhalte ich Folgendes:
structBlah->.memberBlah
Wenn ich dann xden fremden Punkt lösche, funktionieren Einfügen und Punkt nicht mehr, da die letzte Änderung ein Löschen war.
Grundsätzlich besteht das Problem darin, dass der Wiederholungsoperator eine Bewegung und eine Bearbeitung wiederholt, während wir hier zwei Änderungen wiederholen müssen: eine Löschung und eine Einfügung.
Gibt es eine bequeme Möglichkeit, dies zu tun? Eine Idee, die ich hatte, war, vielleicht ein Makro wie dieses zu verwenden:
xi-><ESC>
quelle
a<BS>-><Esc>
(ebenfallsi<Del>-><Esc>
) Befehle sind für mich perfekt wiederholbar.s
statti
, um ein Zeichen zu löschen und in den Einfügemodus zu wechseln.Antworten:
Der Befehl cw (Wort ändern) löst Ihr Problem.
Setzen Sie den Cursor auf den Punkt und geben Sie ihn ein
cw-><Escape>
verwandelt sich in
und der
.
Operator wird weiterhin arbeiten, da cw eine Operation ist, die sowohl das Löschen als auch das Ersetzen ausführt.quelle
s
fürcw
und haben Sie es.Sie könnten die verwenden
s
Operator verwenden, der das Zeichen unter Ihrem Cursor löscht und Sie in den Einfügemodus versetzt. Sie können dann den Ersatz eingeben und später verwenden.
, um den gesamten Ersatz zu wiederholen. Workflow wird:/\.
um alle Perioden hervorzuheben.n
zum ersten Punkts->
und dann Esc . Dadurch wird der Punkt ersetzt und der Text mit einem einzigen Vorgang eingefügt.n
zum nächsten Punkt.
bei Bedarf ändern.:h s
Für mehr Information.quelle
s
oben vorgeschlagenen Lösung vor, und Sie können sie für das nächste Element in Ihrer Änderungsliste verwenden.n
zu finden, aber die Schlüsseloptimierung hier ist die Verwendung vons->
Esc. Mit diesen vier Tastenanschlägen wird die.
gewünschte Textänderung erstellt, und Sie können diese Aktion verwenden, wo immer Sie möchten.Ich empfehle die Verwendung des Ersatzbefehls:
Dieser Wille:
Dies wird alles durchgehen
.
Ihre Datei und jedes Mal fragen, ob Sie ersetzen möchten.Drücken Sie
y
für Ersatz,n
um zum nächsten Punkt zu gelangen.siehe
:h :s_c
für alle Optionen.quelle
:%
mit:g/.../
auf passenden Linien nur Ersatz, mit:'<,'>
für die aktuell ausgewählten Linien oder mit:.
oder:
für die aktuelle Zeile und die Verwendung@:
des Befehls auf bestimmte Zeilen zu wiederholen , dass Sie in einer anderen Art und Weise navigieren.Wenn Sie keine Substitution oder den Punktbefehl verwenden möchten, wie in den anderen Antworten vorgeschlagen, ist es wahrscheinlich am besten, ein Makro zu erstellen, das Sie verwenden können, wenn sich Ihr Cursor neben einem Punkt befindet.
Sie können das Makro aufzeichnen
Mit dem folgenden Punkt in der Zeile (
f.
) wird es visuell ausgewählt (v
) und ersetzt (c->
).Wenn Sie nun in Ihrem Code navigieren und einen Punkt erkennen, der geändert werden soll, können Sie das Makro mit aufrufen @a.
Sie können das sogar in Ihre einfügen
.vimrc
, um das Makro zwischen verschiedenen Codierungssitzungen zu halten:Bearbeiten Sie @gro♀ und schlagen Sie in den Kommentaren vor, ein zweites Register zu verwenden, um ein sich rückwärts bewegendes Makro zu erhalten, was ziemlich nützlich erscheint:
quelle
let @q="F.vc->^["
und verwenden würdelet @w="f.vc->^[""
und einen vorherigen Punkt und einen nächsten Punktbefehl hätte .<ESC>
vor demq
im Makro? (Ich habe keinen Zugriff auf einen Computer, daher habe ich ihn nicht getestet.)