Je suis conscient que dans Vim, je peux souvent répéter une commande en ajoutant simplement un numéro devant elle. Par exemple, on peut supprimer 5 lignes par:
5dd
Il est également souvent possible de spécifier une plage de lignes à laquelle appliquer une commande, par exemple
:10,20s:hello:goodbye:gc
Comment puis-je effectuer une «modification verticale»? Je voudrais, par exemple, insérer un symbole particulier, disons une virgule, au début (sauter les espaces, c'est-à-dire ce que vous obtiendriez si vous tapez une virgule après Shift-I en mode commande) de chaque ligne dans un gamme. Comment cela peut-il être réalisé (sans recourir à la période de baisse-période-baisse-période-baisse)?
^\(\s*\)
capture l'espace blanc initial et l'enregistre dans un registre que vous pouvez ensuite lire\1
.Ctrl- vpasse en mode visuel par blocs. Vous pouvez ensuite vous déplacer (dans le hjklsens-sens, comme d'habitude), et si vous voulez insérer quelque chose sur plusieurs lignes, utilisez Shift- i.
Donc pour le texte:
si vous appuyez sur Ctrl- vavec votre curseur sur le 1, appuyez jdeux fois pour descendre de deux colonnes, puis Shift- i,ESC, votre texte ressemblerait à ceci:
(l'insert multiligne a un petit décalage et ne sera rendu qu'après avoir frappé ESC).
la source
i
sans la touche Majuscule?C'est à cela que sert la commande: norm (al):
la source
Si vous utilisez déjà le '.' pour répéter beaucoup votre dernière commande, j'ai trouvé que c'était la solution la plus pratique à ce jour. Il vous permet de répéter votre dernière commande sur chaque ligne d'un bloc visuel en utilisant
la source
.
fonctionne par ligne en mode visuel. Je pense que le mode visuel dans ce cas peut parfois être pratique pour sélectionner une plage de lignes. Mais les commandes et les macros sont plus flexibles et puissantes dans ce cas.Je pense que le moyen le plus simple de le faire est
1) enregistrez une macro pour une ligne, appelez-la «a»; dans ce cas on types
2) sélectionnez le bloc de lignes auquel vous souhaitez appliquer la macro
3) utiliser la fonction 'norm' pour exécuter la macro 'a' sur ce bloc de lignes, c'est-à-dire,
la source
Je pense que le plus simple est d'enregistrer une macro, puis de répéter la macro autant de fois que vous le souhaitez. Par exemple, pour ajouter une virgule au début de chaque ligne, vous tapez:
pour répéter cela 5 fois, vous entrez
la source
J'utilise le mode visuel de bloc . Cela vous permet d'effectuer des insertions / modifications sur plusieurs lignes (également appelées «modifications verticales»).
la source
Avec votre modification déjà enregistrée dans l'
.
opérateur, procédez comme suit::norm .
la source
En dehors des macros, comme déjà répondu, pour le cas spécifique de l'insertion d'une virgule dans une plage de lignes (par exemple de la ligne 10 à 20), vous pouvez faire quelque chose comme:
Autrement dit, vous pouvez créer une correspondance de groupe numérotée avec \ (et \), et utiliser \ 1 dans la chaîne de remplacement pour dire "remplacer par le contenu de la correspondance".
la source