Ein Schnittmuster, auf das ich häufig stoße, ist das folgende: Ich möchte einen Textabschnitt in Anführungszeichen oder Klammern setzen und diesen Textabschnitt in ein anderes Paar von Anführungszeichen / Klammern setzen.
Wenn ich zum Beispiel den Klassennamen kopieren foo bar
und an einer anderen Stelle einfügen möchte :
<span class="foo bar">
<div class="this-should-be-replaced-with-foo-and-bar">
Was ich weiß, ist yi"
Folgendes : Wenn ich mich in der Klasse des Spans bewege, ziehe ich den Text in den Anführungszeichen.
Jetzt habe ich das in meinem Register, also sollte ich den Klasseninhalt des div damit ersetzen können. Aber ich kann keinen praktischen Weg finden, dies zu tun.
Wenn ich dies benutze ciw
, überschreibe ich mein Register mit dem zu ändernden Inhalt, sodass ich meinen zerrissenen Text verliere.
Das Beste, was ich mir einfallen lassen kann, ist, zum ersten Zitat der Klasse des Div zu wechseln, zu schlagen p
und dann zum nächsten Zitat mit zu streichen dt"
.
Normalerweise vermassle ich meine Position und füge sie irgendwo in die Anführungszeichen ein, um die beiden Zeichenfolgen zu verschmelzen, und es bringt die Dinge durcheinander.
Ich hoffe, dass es eine Möglichkeit gibt, die Kombination "Ersetzen Sie den inneren Text bitte durch meinen zerrissenen Inhalt", um dies zu vereinfachen.
quelle
Sie können das nummerierte Register verwenden. Zuerst mit "Foo-Bar" ziehen
yi"
, die das"0
Register füllen wird , siehe:h "0
. Dann machen Sieci"<c-r>0
mit dem Inhalt des Registers 0 zu ersetzen.Siehe
:h i_CTRL-R
für eine Beschreibung des letzten Teils.quelle
yi"
) und es aus dem Register einfügen, in dem0
es gespeichert ist, nachdem Sie den zu ändernden Text gelöscht haben (ci"<c-r>0
)? In Bezug auf Vimgolf gewinnst du 2 Tastenanschläge und spielst nicht mit deinen Registern herum.CTRL+r
vora
, das ist , was<c-r>
bedeutet.ciw
den gelöschten Text tatsächlich in das unbenannte Register, aber die Register werden verschoben, deshalb müssen Sie<c-r>0
anstelle von verwenden<c-r>"
. Sehen:h quote_number
."0
Register wird nur durch den Befehl yank gefüllt und wird zB nicht gestörtc
.Ich brauche das so oft, dass ich ein Plugin geschrieben habe, um die maximale Geschwindigkeit zu vereinfachen und zuzulassen: ReplaceWithRegister .
Dieses Plugin bietet einen Zwei-in-Eins-
gr
Befehl, der Text, der von einem {motion} / text-Objekt, einer ganzen Zeile oder der aktuellen Auswahl abgedeckt wird, durch den Inhalt eines Registers ersetzt. Der alte Text wird im Black-Hole-Register gelöscht, dh er ist weg. Es behandelt transparent viele Eckfälle und ermöglicht eine schnelle Wiederholung über den Standardbefehl.
. Sollte es Ihnen nicht gefallen, finden Sie auf der Seite Links zu Alternativen.quelle
Hier ist eine andere Lösung. Es ist nicht das beste in Bezug auf Vimgolf, aber es verwendet das Black-Hole-Register:
Sobald Sie an der
foo bar
Saite angelangt sind, können Sie sie normal mit reißenyi"
.Dann in den Klammern ändern:
"_di"P
Welches ist:
Der Vorteil des Black Hole Registers ist, dass es Ihre anderen Register nicht durcheinander bringt. Sehen Sie
:h quote_
für weitere Details.(Beachten Sie, dass diese Antwort nur hier ist, um über das Blackout-Register zu sprechen. Ich persönlich verwende die visuelle Auswahl, wie von @grodzik vorgeschlagen.)
quelle
P
dafür. Wenn Siedi"
den Cursor auf die letzten Anführungszeichen setzen und danachp
einfügen, wird wieP
vor der aktuellen Position eingefügt.