42 votes

Vim : comment coller un bloc de texte à la fin de plusieurs lignes?

Dire que j'ai un bloc de texte comme ceci :

// Comment1
// Comment2
// Comment3

Et je veux ajouter chacune de ces lignes à la fin de 3 lignes de code correspondantes :

foo = 1; 
bar = 2; 
baz = 3;

De sorte que le résultat final est

foo = 1; // Comment1
bar = 2; // Comment2
baz = 3; // Comment3

Y a-t-il un moyen facile de le faire dans Vim?

44voto

actionshrimp Points 556

Utilisez le mode bloc visuel (Ctrl+v) pour sélectionner un ensemble de lignes, puis soit y soit d les supprimer.

Ensuite, si vous avez sélectionné les lignes foo, bar, baz, utilisez à nouveau le mode bloc visuel pour sélectionner la première colonne des lignes de commentaire puis Shift+p pour les placer (ou si vous avez sélectionné les lignes de commentaire, sélectionnez la dernière colonne des lignes foo bar baz et p pour les placer.

Prendre de la pratique pour bien positionner peut prendre un peu de temps, mais une fois que vous avez le coup de main, vous volerez. Lorsque vous avez un bloc sélectionné, vous pouvez également utiliser Shift+A pour ajouter par exemple des espaces au bloc (lors de l'ajout, le nouveau texte n'apparaîtra que dans la ligne supérieure, mais une fois que vous appuyez sur échap, il apparaîtra magiquement dans toutes les lignes sélectionnées). De même, Shift+i fera la même chose au début du bloc sélectionné sur chaque ligne.

Vous devrez cependant nettoyer les lignes vides par la suite.

Il y a aussi un excellent épisode de vimcasts montrant ces techniques en détail.

1voto

TLP Points 119

Eh bien, que ce soit facile ou non, tu me diras. Naviguer vers // Comment 1, appuyez sur dd pour supprimer. Naviguez jusqu'à la ligne avec foo = 1; et appuyez sur p, pour coller en dessous de la ligne. Remontez jusqu'à foo de nouveau, et appuyez sur J pour rejoindre la ligne. Tada.

0voto

Jeet Points 298

La suite fera exactement ce que vous décrivez :

:%s@\(\w\s\+=\s\+\(\d\+\)\)@\=submatch(1) . " // Comment" . submatch(2)@

En fonction de ce dont vous avez vraiment besoin (par opposition à l'exemple), en pratique, il pourrait être plus simple de sélectionner en bloc le bloc "// Comment1" etc. (Ctrlv), copier (y), aller à la fin du bloc de code et coller.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X