Gibt es eine Möglichkeit, ein Zeichen im Einfügemodus von Vim zu wiederholen? Angenommen, ich möchte 80 Bindestriche in Emacs einfügen, die ich eingeben würde:
Ctrl+U 8 0 -
Die einzige Möglichkeit, wie ich es in VIM machen kann, besteht darin, den normalen Modus für das Wiederholungsargument zu verlassen, dann in den Einfügemodus zurückzukehren, um den Bindestrich einzugeben, dann zu beenden, um die tatsächlichen Striche einzufügen, und dann in den Einfügemodus zurückzukehren, um fortzufahren Tippen. Die Sequenz ist wirklich lang:
Esc 8 0 a - Esc a
Es wäre schön, nicht in den Modus ein- und auszuschalten.
<C-o>
ist eine Abkürzung fürCtrl
+o
.:normal
Befehl, mit dem Sie sie an der Eingabeaufforderung ausgeben können. Gelegentlich sehr nützlich.Escnic Esc Esc.
ZB Esc4iJEsc Escwird ausgegeben
JJJJ
.quelle
quelle
Durch einzelne Wiederholung:
Weitere Details zur Einzelwiederholung:
:help .
quelle
Sie können auch tun, Escnihello there EscEsc
Dabei ist n die Anzahl der Wiederholungen.
z.B, Esc5ihello there EscEsc
quelle
Esc
danach zweimal drücken muss . Vielen Dank @prashantEs gibt viele andere Möglichkeiten, aber AFAIK, die Sie beschreiben, ist die kürzeste. In vim solltest du deine Zeit meistens im Befehlsmodus verbringen, das wären also nur 3 Tastenanschläge + die Anzahl der Wiederholungen (80i-).
Wenn Sie jedoch feststellen, dass Sie diese Wiederholungssache sehr häufig verwenden, können Sie sich zu diesem Zweck eine Funktion oder ein Makro erstellen. vielleicht so etwas wie:
quelle
Sie sagten, es wäre "schön", im "Einfügen" -Modus zu bleiben, aber im Befehlsmodus würde die folgende Methode Ihre 2. vermeiden ESC : -
Obwohl ich weiß, dass dieser Beitrag alt ist, scheint es eine Schande zu sein, die offensichtliche Option "Ausschneiden / Kopieren und Einfügen" zu verpassen ...
x ...Schnitt
80 ...Anzahl der Kopien
p Einfügen
Hinweis: Dies ähnelt der von Martin Beckett vorgeschlagenen Methode. Bei der Ausgabe dieses Befehls tritt jedoch eine Verzögerung auf. Möglicherweise wird dieser Befehl sofort ausgeführt, da er mehrmals den Modus wechselt.
quelle
v
y
um in den visuellen Modus zu wechseln, dann80
p
zu ziehen und dann 80 Mal einzufügen . Vermisse ich etwas oder hast du einen Schritt vergessen?Späte Antwort, aber für das, was es wert ist, können Sie den Befehl "letzten Befehl wiederholen" verwenden, wenn Sie Spam per Hand senden möchten:
.
i"Phrase" Esc -
i to insert, enter phrase/character, esc to go normal mode
. - -
Spam till you are satisfied. Will repeatedly input the phrase you typed (it repeats your last command).
Ich finde das besonders nützlich, wenn ich nicht genau weiß, wie viele Wiederholungen ich machen möchte, aber visuell weiß, wie lange es dauern soll. Grundsätzlich sprengen die
.
bis meine Augen zufrieden sind.quelle
Ich bin überrascht, dass dies noch niemand vorgeschlagen hat:
Verwenden Sie im Einfügemodus
<C-r>=repeat('-', 80)<CR>
Das ist:
repeat('-', 80)
Funktioniert, um ein beliebiges Zeichen beliebig oft zu wiederholen.
Dies verwendet mehr Tastenanschläge als die Antwort von @ romainl, verlässt jedoch den Einfügemodus überhaupt nicht.
quelle
Zusätzlich zu der Schreibfunktion, mit der Text mehrmals wiederholt wird, können Sie Folgendes verwenden <C-x><C-l>: Wenn Sie bereits eine Zeile mit 80 Bindestrichen haben, schreiben Sie am Anfang einer neuen Zeile einige Bindestriche und drücken Sie <C-x><C-l>dann, um die Zeilen zu vervollständigen, die mit diesen wenigen Bindestrichen beginnen wahrscheinlich diese Linie mit 80 Strichen. Ich habe früher horizontale Linien (78 Striche) in Hilfedateien geschrieben.
quelle
Für eine so einfache Aufgabe
abbreviation
sollte der Trick reichen. Fügen Sie Folgendes zu Ihrem hinzu.vimrc
Wenn Sie ab sofort
--
ein Leerzeichen eingeben (während Sie sich im Einfügemodus befinden),--
wird das automatisch in das-
80-fache konvertiert .Mit der Funktion
repeat
Sie die Zeichenfolge so oft wiederholen, wie Sie möchten.Beachten Sie, dass Sie es vor dem Aktualisieren testen können,
.vimrc
indem Sie in dencommand
Modus wechseln und dann Folgendes ausgeben:iab <expr> -- repeat('-', 80)
quelle
Ich habe dies getan, ohne den INSERT-Modus mit den folgenden Schritten zu verlassen.
-- (insert) VISUAL --
Modus zu wechseln)i
-
Ctrl+o
v
y
Ctrl+o
80
p
Dadurch werden alle Striche horizontal in einer einzigen Zeile gedruckt.
quelle