Ich versuche zu verstehen, wie ich einen Operator mit anschließender Bewegung in einem Mapping verwenden kann. Beispielsweise:
nmap /c c{here we pending for a motion}/<C-r>"<CR>
Die Karte sollte Folgendes tun:
- Aktivieren Sie den
c
Bediener und warten Sie auf die nächste Bewegung. - ZB kann ich hier eingeben,
t,
um alles vor dem nächsten Komma zu ändern; - Gehen Sie in den Einfügemodus und löschen Sie alles zwischen Cursor und Komma.
- Gelöschter Text wird automatisch als Muster gesucht
Einfach ausgedrückt, nachdem der Bewegungstext entfernt wurde, wird der Einfügemodus mit hervorgehobenen Vorkommen des gelöschten Texts beendet. Ich wäre sehr dankbar, wenn mir jemand helfen würde, diesen Fall zu klären.
AKTUALISIEREN
Die Antworten sind fast das, was ich will. Aber! Wenn ich drücke /cw
, tippe etwas anstelle des Wortes und drücke dann <Esc>
. Danach gehe ich davon aus, dasselbe bei den nächsten Ereignissen zu tun. Nach dem Drücken von n
(gehe zum nächsten Vorkommen) und .
(wiederhole den letzten Befehl) wird nur der zuletzt eingegebene Text vorangestellt, anstatt ihn zu ersetzen. Das Hauptziel des Mappings ist es, es mit n/N
und .
zu wiederholen. Habe ich etwas verpasst
quelle
/c
undi
) vim.
wiederholt nur die letzte. Wenn Sie es erweitern möchten, überprüfen Sie dasrepeat
Plugin. @ TimurFayzrakhmanov gibt es auch:g
und:s
Befehle, kann Ihnen auch helfen."
Ihr Code einen ungeraden Code'let @/=@""'
? Ich dachte , es ist möglich, zum Beispielsilent exec 'normal!
[v]c'
, weilc
Bediener tun , was ich erwarten, außer es nicht den geänderten Text zu dem Suchmuster hinzufügt.""
war ein Tippfehler .. fix .. Ich kam auch mitc
, aber es fügte ein Leerzeichen hinzu, weil es einen Moduswechsel gibt,n-i-n-i
denke ich ... mache einen Test, den du sehen wirst.d
vony
undstartinsert
zucall feedkeys("cgn", 'n')
(siehe meine Antwort unten)Es ist einfacher, komplexe Zuordnungen mithilfe von Funktionen zu implementieren (und zu dokumentieren):
Dann rufen Sie in Ihrem Mapping diese Funktion auf:
Bearbeiten:
Wenn Ihre Absicht durchführen zu suchen ist und Ersetzen in einer großen Anzahl von Orten sollten Sie den Ersatz - Befehl versuchen:
:s
. Sie können Ihre Zuordnung ändern, um die visuelle Auswahl in das Suchmuster zu kopieren:quelle
enter motion:
, gab er:t,ggVGJZZ
^ _ ^ Es ist ein häufiges Problem für die Befehlsverkettung/cw
dann etwas anstelle des Wortes und drücke dann<Esc>
. Nachdem ich das gleiche mit den nächsten Vorkommnissen machen möchte. Nach dem Drücken vonn
(gehe zum nächsten Vorkommen) und.
(wiederhole den letzten Befehl) wird nur der zuletzt eingegebene Text vorangestellt, anstatt ihn zu ersetzen. Das Hauptziel des Mappings ist es, es mitn/N
und.
zu wiederholen. Habe ich etwas verpasst.
Befehl zu wiederholen.<CR>
ausinput()
).Diese Lösung funktioniert mit "Letzten Befehl wiederholen" (aka
.
):Wenn Sie das wiederholen, brauchen Sie es nicht einmal zu verwenden
n
, Sie können es nur verwenden.
, um das nächste Vorkommen direkt abzurufen und zu ersetzen, wenn Sie schneller gehen möchten.Wenn Sie Hervorhebungen der übereinstimmenden Wörter wünschen, können Sie diese optional
'cgn'
durch ersetzen'n``cgn'
.quelle