Erwägen:
apple
pear
Setzen Sie den Cursor in die erste Zeile und geben Sie Yp
Folgendes ein:
apple
apple
pear
Setzen Sie den Cursor auf die pear
Zeile und geben Sie ein .
, um den letzten Befehl zu wiederholen. Dies wiederholt nur das p
(und nicht die Kombination Yp
) und erzeugt:
apple
apple
pear
apple
Ich möchte eine Möglichkeit finden, .
die letzten N Befehle zu wiederholen. So etwas wie 2.
die Kombination Yp
zu wiederholen , um zu produzieren:
apple
apple
pear
pear
Ofc das wird nicht funktionieren - es wiederholt das p
zweimal. Die Idee wäre jedoch, "die Reihenfolge der letzten beiden Befehle zu wiederholen ".
Ich weiß, dass ich q
Befehlssequenzen aufzeichnen und wiederholen kann @@
, aber diese Lösung ist nicht ideal, da Sie die ganze Zeit im Voraus geplant haben müssen, während Sie in der Praxis oft nicht erkennen, dass Sie etwas erst danach wiederholen müssen Du hast es geschafft.
Gibt es eine Möglichkeit, das zu erreichen, was ich will?
Trostpreis: Wenn dies nicht möglich ist, gibt es eine Möglichkeit, die letzte Makro-Wiedergabe zu wiederholen? Wenn ich beispielsweise @@
für die Wiedergabe meines letzten Makros getippt habe, möchte ich, dass das nachfolgende Makro dem erneuten .
Tippen entspricht @@
- was nicht der Fall ist (z. B. wenn das Ergebnis von @@
von der Zeile abhängt, in der Sie sich befinden).
nno <silent> @@ @@:sil! call repeat#set('@@', v:count1)<CR>
es funktioniert, müssen Sie dieses Plugin installieren: github.com/tpope/vim-repeatAntworten:
Vim speichert nur den zuletzt ausgeführten Befehl, und nur dieser wird von wiederholt
.
. Meiner Meinung nach wäre alles andere schwer zu handhaben.Wenn Sie die
Yp
Kombination als einzelne Entität wiederholen möchten, müssen Sie sie zu einem einzigen Befehl machen. Das Repeat.vim-Plugin von Tim Pope ermöglicht dies auf einfache Weise für benutzerdefinierte Zuordnungen. Wenn Sie eine Kurztaste [Sequenz] für das Mapping auswählen, können Sie diese natürlich schnell (anstelle von.
) erneut eingeben und sogar die Integration von repeat.vim vermeiden.Übrigens bietet mein LineJuggler-Plugin eine
]d
Zuordnung zum Duplizieren der aktuellen Zeile und unterstützt das Wiederholen über repeat.vim.quelle
In
Yp
ist die einzige "Änderung", die wiederholt werden mussp
. Die einzige Möglichkeit, das Verhalten.
im normalen Modus zu ändern, besteht dariny
, diecpoptions
Option zu ergänzen :Damit können Sie sowohl den letzten Ruck als auch die letzte Änderung wiederholen.
Aber das ändert nichts an Ihrem Problem, denn es
Yp
gibt immer noch zwei Befehle: einen Ruck, gefolgt von einer Änderung.Ich glaube nicht, dass Sie ohne nicht triviales Scripting bekommen können, was Sie wollen. Haben Sie sich den Skriptbereich von vim.org angesehen ?
quelle
Ich benutze häufig
map
, um diesen Effekt zu erzielen. Zum Beispiel:Wenn Sie dann
F12
wiederholt drücken, wirdYpYpYp
usw. ausgeführt . Wenn Sie nach jedem Einfügen zur nächsten Zeile wechseln möchten, ordnen SieYp+
stattdessen eine Taste zu .quelle
Die bemerkenswerte Erfindung, die das RepeatLast- Plugin (von unserem eigenen @joeytwiddle ) ist, bietet genau diese Funktionalität über die unheilige Methode, alles aufzuzeichnen, was Sie als Makro tun.
Es enthält eine Reihe neuer Zuordnungen. Wenn ich jedoch die Dokumentation richtig lese, können Sie zur Durchführung der von Ihnen beschriebenen Änderungen die Befehlsfolge verwenden (vorausgesetzt, Sie verwenden die Standardeinstellung
<leader>
von\
):Yp
Ziehen Sie die Linie und fügen Sie sie einapple
.j
Bewegen Sie sich eine Zeile nach unten, sodass sich der Cursor jetzt auf derpear
Zeile befindet.\D
vergiss denj
Befehl,2\.
Wiederholen Sie die beiden BefehleY
undp
quelle