web-dev-qa-db-fra.com

Comment répéter une commande dans Vim, comme "C-x z" dans emacs?

Dans Vim, existe-t-il un moyen de répéter la dernière commande, que ce soit une modification ou non, et sans avoir la prévoyance d'enregistrer d'abord une macro?

Par exemple. dis que je tape :bn, et je veux recommencer (ce n'était pas le bon fichier). Appuyez sur . ne le fait évidemment pas. Ou peut-être que je fais gE et que je veux répéter (avec une seule touche car clairement gE est un peu pénible à taper).

Peut-être qu'il y a des plugins? Similaire à cette question .

(Encore plus cool serait de lier rétroactivement un certain nombre de commandes à une macro, donc on pourrait taper 5qa@a ou quelque chose pour répéter les 5 dernières commandes ...)

48
johv

Pour répéter une commande de ligne de commande, essayez @:, Pour répéter une commande en mode normal/insertion, essayez .,

Ajoutez le mappage ci-dessous à votre .vimrc si vous souhaitez raccourcir le même: -

:noremap <C-P> @:<CR> - Ceci mappera Ctrl + P à la commande de ligne de commande précédente. Vous pouvez mapper n'importe quel autre combo.

65
Ravikiran

:help repeating fournira les commandes de répétition typiques (comme., @ :, etc.). Vous pouvez essayer repeat.vim . Cela pourrait vous rapprocher de ce que vous recherchez.

13
Matt Glover

Pour les commandes de mouvement, aucun mécanisme n'est intégré à Vim. Les commandes Find et To (f/F/t/T) ont ; et , pour répéter et inverser. Il existe quelques plugins qui étendent ces liaisons pour répéter d'autres commandes de mouvement:

http://www.vim.org/scripts/script.php?script_id=2174

http://www.vim.org/scripts/script.php?script_id=3665

Ce dernier devrait prendre en charge la répétition de gE en utilisant ;

10
jpnp

Vous pouvez simplement utiliser "."

Exemple: Vous avez "abc" à 10 endroits dans votre fichier et vous voulez le remplacer par "def" à 5 endroits de celui-ci.

Étape 1: Trouvez la première occurrence de abc en tapant la commande "/ abc"
Étape 2: Une fois le curseur sur "abc", remplacez abc par la commande "cw" pour supprimer le mot "abc"
Étape 3: Tapez "def" comme remplacement et appuyez sur Entrée pour passer en mode commande
Étape 4: Pour répéter cette action, tapez simplement la commande "n" pour passer à la prochaine occurrence de abc et tapez la commande ".". La commande se souvient que vous avez remplacé "abc" par "def" la dernière fois et effectuera la même chose ici.

8
Manan

Vous pouvez mapper @: à une touche pour plus de commodité:

:map <F2> @:

puis il est plus facile de l'utiliser avec des répétitions.

1
insider