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


32

Disons que j'ai un bloc de texte comme celui-ci:

// Commentaire1
// Commentaire2
// Commentaire3

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

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

Pour que le résultat final soit

foo = 1; // Commentaire1
bar = 2; // Commentaire2
baz = 3; // Commentaire3

Existe-t-il un moyen facile de le faire à Vim?


@Flimzy, malheureusement non. De temps en temps, des commentaires comme le vôtre apparaissent dans les questions Vim, mais vérifiez ceci: meta.stackexchange.com/q/25925/160504
sidyll

La meilleure communauté pour cette question est vi.stackexchange.com
thinwybk

Réponses:


36

Utilisez le mode de bloc visuel ( Ctrl+ v) pour sélectionner un ensemble de lignes, puis l'un you l' dautre.

Ensuite, si vous avez sélectionné le foo, bar, lignes baz utiliser le mode bloc visuel à nouveau pour sélectionner la première colonne des lignes de commentaires, puis Shift+ ples en place (ou si vous avez sélectionné les lignes de commentaires, sélectionnez la dernière colonne du foo bar baz lignes et peux en place.

Prendre le contrôle du positionnement peut prendre un peu de pratique, mais lorsque vous aurez le don, vous volerez. Lorsque vous avez sélectionné un bloc, vous pouvez également utiliser Shift+ Apour ajouter, par exemple, des espaces au bloc (lors de l'ajout, le nouveau texte n'apparaîtra que dans la ligne supérieure, mais lorsque vous appuyez sur esc, il apparaîtra comme par magie dans toutes les lignes sélectionnées) . De même, Shift+ ifera de même 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 plus en détail.


1
Je trouve cette solution couplée :set ve=allà très polyvalente. J'utilise personnellement le plugin UnconditionalPaste ( vim.org/scripts/script.php?script_id=3355 ) car il correspond un peu mieux à mes besoins.
Peter Rincker

1

Eh bien, si c'est facile ou non, dites-moi. Accédez à // Comment 1, appuyez sur ddpour supprimer. Accédez à la ligne avec foo = 1;et appuyez sur p, pour coller sous la ligne. Montez à foonouveau et appuyez sur Jpour rejoindre le rang. Tada.


0

Ce qui suit fera exactement ce que vous décrivez:

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

En fonction de ce que vous avez réellement besoin de faire (contrairement à l'exemple), en pratique, il peut être plus simple de sélectionner par bloc le bloc "// Comment1" etc. ( Ctrlv), yank ( y), aller à la fin du code bloquer et coller.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.