161 votes

Comment répéter une modification sur plusieurs lignes dans vim?

Je suis conscient que dans vim, je peux souvent répéter une commande par le simple ajout d'un nombre en face d'elle. Par exemple, on peut supprimer 5 lignes par:

5dd

Il est aussi souvent possible de spécifier une plage de lignes pour appliquer une commande, par exemple

:10,20s:hello:goodbye:gc

Comment puis-je effectuer une "verticale modifier"? J'aimerais, par exemple, insérer un symbole particulier, dire une virgule, au début (en ignorant les espaces, c'est à dire ce que vous obtiendrez si vous types une virgule après la Maj j'en mode de commande) de chaque ligne dans une plage donnée. Comment cela peut-il être atteint (sans recourir à une période-bas-période-bas-période)?

170voto

rampion Points 38697

Ctrl-Shift-V entre dans le mode visuel blockwise. Vous pouvez ensuite déplacer (HJKL-sage, comme d'habitude), et si vous souhaitez insérer quelque chose sur plusieurs lignes, utilisez - je.

Donc, pour le texte:

abc123abc
def456def
ghi789ghi

si vous frappez Ctrl-V avec votre curseur au-dessus de la 1, hit j deux fois pour descendre deux colonnes, puis Maj-je,ESC , votre texte pourrait ressembler à ceci:

abc,123abc
def,456def
ghi,789ghi

(le multi-ligne d'insertion a un peu de lag, et ne sera pas rendu jusqu'à ce que APRÈS avoir appuyé sur la touche ECHAP).

124voto

Svante Points 24355

:10,20s/^/,/

Ou utilisez une macro, enregistrez avec

q a i , ESC j h q

utiliser avec

@ a

Explication: 'qa' commence à enregistrer une macro pour enregistrer 'a', 'q' termine l'enregistrement. Il existe des registres 'a' à 'z' disponibles pour cela.

71voto

C'est à quoi sert la commande: norm (al):

: 10,20 normal je,

53voto

emboss Points 20708

Si vous utilisez déjà le '.' pour répéter votre dernière commande beaucoup, alors j'ai trouvé ceci pour être la solution la plus commode jusqu'ici. Il vous permet de répéter votre dernière commande sur chaque ligne d'un bloc visuel en utilisant

 " allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>
 

18voto

Wimmel Points 7641

Je pense que le plus simple consiste à enregistrer une macro, puis à la répéter autant de fois que vous le souhaitez. Par exemple, pour ajouter une virgule au début de chaque ligne, vous tapez:

 q a I , ESC j q
 

répéter 5 fois, vous entrez

 5 @ a
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X