192 votes

Edition multiligne dans Vim comme dans sublimetext ?

J'ai commencé à utiliser gvim, et je n'arrive pas à comprendre comment fonctionne l'édition multiligne dans gvim.

Par exemple :

Texte original :

asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;

ctrl+q, jjjjjj , $. tout est sélectionné, puis j'appuie sur I pour faire une insertion multiligne.

Mon intention est d'insérer des guillemets comme dans la première ligne, puis d'appuyer sur Esc :

asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;

Que s'est-il passé ? Je m'attendais à un comportement similaire à celui de sublimetext :

enter image description here

Si vous ne savez pas comment cela fonctionne, il suffit de répéter les actions pour chaque ligne. Comment peut-on faire ça ? Et que fait vim ici ?

7voto

Thor Points 13562

Je ne suis pas sûr de ce que vim fait, mais c'est un effet intéressant. La façon dont vous décrivez ce que vous voulez ressemble davantage au fonctionnement des macros ( :help macro ). Quelque chose comme cela permettrait de faire ce que vous voulez avec les macros (en commençant en mode normal) :

  1. qa : Enregistrer une macro pour a registre.
  2. 0w : 0 aller au début de la ligne, w sauter un mot.
  3. i"<Esc> : Entrer en mode insertion, insérer un " et revenir en mode normal.
  4. 2e : Sauter à la fin du deuxième mot.
  5. a"<Esc> : Ajouter un " .
  6. jq Passez à la ligne suivante et terminez l'enregistrement de la macro.

Pris ensemble : qa0wi"<Esc>2ea"<Esc>

Vous pouvez maintenant exécuter la macro avec @a , répétez la dernière macro avec @@ . Pour appliquer au reste du fichier, faites quelque chose comme 99@a qui suppose que vous n'avez pas plus de 99 lignes, l'exécution de la macro se terminera lorsqu'elle atteindra la fin du fichier.

Voici comment obtenir ce que vous voulez avec visual-block-mode (démarrage en mode normal) :

  1. Naviguez jusqu'à l'endroit où vous souhaitez placer la première citation.
  2. Entrez visual-block-mode sélectionnez les lignes que vous voulez affecter, G pour aller au bas du fichier.
  3. Hit I"<Esc> .
  4. Déplacez-vous vers le prochain endroit où vous voulez insérer un " .
  5. Vous voulez répéter ce que vous venez de faire alors un simple . suffira.

2voto

user3240484 Points 74

Si quelqu'un comme moi a trouvé ce vieux sujet :

Un excellent plugin : https://github.com/mg979/vim-visual-multi/

Il est très proche de l'expérience d'édition multiligne de SublimeText et fonctionne bien.

0voto

willmcpherson2 Points 21

Ma solution est d'utiliser ces 2 mappings :

map <leader>n <Esc><Esc>0qq
map <leader>m q:'<,'>-1normal!@q<CR><Down>

Comment les utiliser :

  1. Sélectionnez vos lignes. Si je veux sélectionner les 12 lignes suivantes, j'appuie simplement sur V12j
  2. Appuyez sur <leader>n
  3. Apportez vos modifications à la ligne
  4. Assurez-vous que vous êtes en mode normal, puis appuyez sur <leader>m

Pour effectuer une autre modification, vous n'avez pas besoin de refaire la sélection. Il suffit d'appuyer sur <leader>n faites votre modification et appuyez sur <leader>m pour postuler.


Comment cela fonctionne :

  • <Esc><Esc>0qq Quittez la sélection visuelle, allez au début de la ligne et commencez à enregistrer une macro.

  • q Arrêtez l'enregistrement de la macro.

  • :'<,'>-1normal!@q<CR> Du début de la sélection visuelle à la ligne précédant la fin, jouez la macro sur chaque ligne.

  • <Down> Revenez à la dernière ligne.


Vous pouvez aussi simplement mapper la même touche mais pour des modes différents :

vmap <leader>m <Esc><Esc>0qq
nmap <leader>m q:'<,'>-1normal!@q<CR><Down>

Bien que cela gâche votre capacité à faire un autre montage. Vous devrez resélectionner vos lignes.

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