Comment répéter certaines actions certaines fois sur Vim?
Dans Vim, je veux généralement répéter quelques séries de commandes à certaines reprises. Dites, je veux commenter 5 lignes, j'utiliserais
I//<Esc>j
.j.j.j.j
Est-il possible de répéter le dernier".j" partie plusieurs fois?
5 réponses
Une façon de le faire est d'assigner votre séquence de touches à une macro, puis exécutez la macro une fois suivie de la commande @@
run-last-macro. Par exemple:
qa.jq@a@@
Si vous savez combien de fois vous voulez répéter la macro, vous pouvez utiliser 4@@
ou autre.
, Vous pouvez sélectionner visuellement les lignes que vous souhaitez répéter, tapez - :normal! .
pour utiliser vim .
sur chaque ligne. Parce que vous avez commencé avec une sélection visuelle, cela finit par ressembler à ceci:
:'<,'>normal! .
Cependant, si vous ajoutez et supprimez beaucoup de Commentaires //
, vous trouverez peut-être les mappages suivants utiles:
" add // comment with K
noremap K :s,^\(//\)\=,//,e <BAR> nohls<CR>j
" remove // comment with CTRL+K
noremap <C-K> :s,^//,,e <BAR> nohls<CR>j
, Vous pouvez utiliser 5K
commenter 5 lignes, vous pouvez utiliser le mode visuel pour sélectionner vos premières lignes, ou vous pouvez simplement marteau K
jusqu'à ce que vous avez commenté tout ce que vous vouloir.
En ce qui concerne votre exemple spécifique, je préfère faire l'insertion de plusieurs lignes en utilisant le mode de bloc visuel (accessible avec Ctrl-v
). Par exemple, si j'avais les lignes suivantes:
This should be a comment.
So should this.
This is definitely a comment.
Is this a comment? Yes.
Je voudrais aller au premier caractère en haut de la ligne supérieure, frapper Ctrl-v
pour entrer en mode bloc visuel, naviguer jusqu'à la dernière ligne (peut-être en utilisant 3j
pour descendre 3 lignes, peut-être en utilisant 4g
pour aller directement à la 4ème ligne, ou peut-être simplement G
pour aller à la fin), puis une fois:
// This should be a comment.
// So should this.
// This is definitely a comment.
// Is this a comment? Yes.
En outre, il y a un plugin commenter/un-commenter très pratique qui prend en charge de nombreuses langues ici. C'est plus facile que d'insérer/supprimer manuellement des commentaires.
Pour votre exemple particulier. vous pouvez également utiliser une plage .,.5s#^#//#
(pour ce faire et les 5 lignes suivantes) ou un bloc visuel (appuyez sur v, puis sélectionnez le texte que vous voulez) suivi de :%s#^#//#
.
Une autre façon de le faire est de définir des marques et d'exécuter des substitutions sur cette plage:
ma jjjj mb :'a,'bs,^,// ,