Existe-t-il un moyen de répéter un caractère en mode insertion de Vim? Par exemple, disons que je voudrais insérer 80 tirets, dans quelque chose comme emacs, je taperais:
Ctrl+U 8 0 -
La seule façon dont je sais comment le faire dans VIM est de quitter le mode normal pour l'argument de répétition, puis de revenir en mode insertion pour taper le tiret, puis de quitter pour insérer les tirets réels, ET puis de revenir en mode insertion pour continuer dactylographie. La séquence est vraiment longue:
Esc 8 0 a - Esc a
Ce serait bien de ne pas basculer entre les modes.
<C-o>
est un raccourci pourCtrl
+o
.:normal
commande qui vous permet de les émettre à partir de l'invite de commande. Parfois très utile.Escnic Esc Esc.
Par exemple, Esc4iJEsc Escsortira
JJJJ
.la source
la source
Par répétition unique:
Plus de détails sur la répétition unique:
:help .
la source
Vous pouvez aussi faire, Escnihello there EscEsc
où, n est le nombre de répétitions.
par exemple, Esc5ihello there EscEsc
la source
Esc
deux fois après. Merci @prashantIl existe de nombreux autres moyens mais AFAIK celui que vous décrivez est le plus court. Dans vim, vous êtes principalement censé passer votre temps en mode commande, donc ce serait juste 3 frappes + le nombre de répétitions (80i-).
Cependant, si vous constatez que vous utilisez très souvent cette répétition, vous pouvez créer vous-même une fonction ou une macro à cette fin; peut-être quelque chose comme:
la source
Vous avez dit qu'il serait `` bien '' de rester en mode `` Insertion '', mais en mode Commande, la méthode suivante éviterait votre 2ème ESC: -
Bien que je sache que cet article est ancien, il semble dommage de manquer l'option évidente `` Couper / Copier et coller '' ...
x ...Couper
80 ...nombre de copies
p Pâte
Remarque: Ceci est similaire à la méthode suggérée par Martin Beckett, mais j'obtiens un délai lors de l'émission de cette commande, peut-être parce qu'elle change de mode plusieurs fois, cette commande s'exécute instantanément.
la source
v
y
pour entrer en mode visuel, puis tirer, puis80
p
le coller 80 fois. Est-ce que je manque quelque chose ou avez-vous oublié une étape?Réponse tardive mais pour ce que ça vaut, si vous voulez le spammer, vous pouvez utiliser la commande "répéter la dernière commande":
.
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).
Je trouve cela particulièrement utile lorsque je ne sais pas exactement combien de répétitions je veux faire, mais que je sais visuellement combien de temps je veux que cela dure. Fondamentalement, faites exploser
.
jusqu'à ce que mes yeux soient satisfaits.la source
Je suis surpris que personne n'ait encore suggéré cela:
En mode Insertion, utilisez
<C-r>=repeat('-', 80)<CR>
C'est:
repeat('-', 80)
Fonctionne pour répéter n'importe quel caractère un nombre illimité de fois.
Cela utilise plus de frappes que la réponse de @ romainl, mais ne quitte pas du tout le mode Insertion.
la source
En plus de la fonction d'écriture qui répétera le texte plusieurs fois, vous pouvez utiliser <C-x><C-l>: si vous avez déjà une ligne qui contient 80 tirets, écrire quelques tirets au début de la nouvelle ligne puis appuyer sur <C-x><C-l>va compléter les lignes qui commencent par ces quelques tirets qui être probablement cette ligne avec 80 tirets. J'écrivais des lignes horizontales (78 tirets) dans les fichiers d'aide de cette manière.
la source
Pour une tâche aussi facile
abbreviation
devrait faire l'affaire. Ajoutez ce qui suit à votre.vimrc
et à partir de maintenant, lorsque vous tapez
--
suivi d'un espace (pendant que vous êtes en mode insertion), le--
sera automatiquement converti en-
80 fois.En utilisant la fonction
repeat
vous pouvez répéter la chaîne autant de fois que vous le souhaitez.Notez que vous pouvez le tester avant de mettre à jour le
.vimrc
en entrant encommand
mode puis en émettant ce qui suit:iab <expr> -- repeat('-', 80)
la source
Je l'ai fait sans quitter le mode INSERT en suivant les étapes ci-dessous.
-- (insert) VISUAL --
mode)i
-
Ctrl+o
v
y
Ctrl+o
80
p
Cela imprimera tous les tirets horizontalement sur une seule ligne.
la source