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 ?

300voto

romainl Points 55506

Faites-vous une faveur en abandonnant la couche de compatibilité de Windows.

Le raccourci normal pour entrer en mode Visual-Block est le suivant <C-v> .

D'autres ont traité de l'enregistrement des macros, voici quelques autres idées :

En utilisant uniquement bloc visuel mode.

  1. Placez le curseur sur le deuxième mot :

    asd |a|sd 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;
  2. Hit <C-v> pour entrer bloc visuel et élargissez votre sélection vers le bas :

    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
    asd [a]sd asd asd asd;
  3. Hit I"<Esc> à obtenir :

    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;
  4. Placez le curseur sur le dernier caractère du troisième mot :

    asd "asd as|d| 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;
  5. Hit <C-v> pour entrer bloc visuel et élargissez votre sélection vers le bas :

    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
    asd "asd as[d] asd asd;
  6. Hit A"<Esc> à obtenir :

    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;

Avec bloc visuel et Surround.vim .

  1. Placez le curseur sur le deuxième mot :

    asd |a|sd 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;
  2. Hit <C-v> pour entrer bloc visuel et élargissez votre sélection vers le bas et vers la droite :

    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;
  3. Hit S" pour entourer votre sélection de " :

    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;

Avec ligne visuelle et :normal .

  1. Hit V pour sélectionner la ligne entière et l'étendre vers le bas :

    [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;]
  2. Exécutez cette commande : :'<,'>norm ^wi"<C-v><Esc>eea"<CR> à obtenir :

    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;
    • :norm[al] vous permet d'exécuter normal sur une série de lignes (les commandes du mode '<,'> est ajouté automatiquement par Vim et signifie "agir sur la zone sélectionnée")

    • ^ place le curseur sur le premier caractère de la ligne

    • w passe au mot suivant

    • i" insère un " avant le curseur

    • <C-v><Esc> est la manière dont Vim saisit un caractère de contrôle dans ce contexte, ici c'est <Esc> utilisé pour sortir insérer mode

    • ee passe à la fin du mot suivant

    • a" ajoute un " après le curseur

    • <CR> exécute la commande

    En utilisant Surround.vim, la commande ci-dessus devient

    :'<,'>norm ^wvees"<CR>

45voto

ldigas Points 19740

Il existe plusieurs façons d'y parvenir dans Vim. Je ne sais pas lesquelles sont les plus similaires à celles de Sublime Text.


La première serait via mode d'insertion multiligne . Placez votre curseur sur le deuxième "a" de la première ligne, appuyez sur Ctrl-V sélectionnez toutes les lignes, puis appuyez sur I et mettre un double guillemet. En appuyant sur <esc> répétera l'opération sur chaque ligne.


La deuxième est via les macros. Mettez le curseur sur le premier caractère, et lancez l'enregistrement d'une macro avec qa . Allez à votre droite avec llll , entrer en mode insertion avec a vous posez une double citation, vous quittez le mode insertion et vous retournez au début de la ligne votre ligne avec <home> (ou équivalent). Presse j pour descendre d'une rangée. Arrêtez l'enregistrement avec q . Et ensuite, rejouez la macro avec @a . Plusieurs fois.


Est-ce que l'une des approches ci-dessus fonctionne pour vous ?

39voto

joeytwiddle Points 3226

Ce sont là quelques bonnes solutions prêtes à l'emploi données ci-dessus, mais nous pouvons aussi essayer certains plugins qui fournissent des curseurs multiples comme Sublime.

Je pense que celui-ci est prometteur :

Il a semblé abandonné pendant un certain temps, mais a bénéficié de quelques contributions en 2014.

Il est assez puissant, bien qu'il m'ait fallu un peu de temps pour m'habituer à son flux (qui est assez semblable à Sublime mais toujours modal comme Vim).

D'après mon expérience, si vous avez beaucoup d'autres plugins installés, vous pouvez rencontrer des conflits !

Il existe d'autres tentatives de cette fonctionnalité :

N'hésitez pas à éditer si vous remarquez que l'un de ces éléments doit être amélioré.

20voto

srini.venigalla Points 3734

Si vous utilisez la commande "globale", vous pouvez répéter ce que vous pouvez faire sur une ligne sur un nombre quelconque de lignes.

:g/<search>/.<your ex command>

exemple :

:g/foo/.s/bar/baz/g

La commande ci-dessus trouve toutes les lignes qui ont foo, et remplace toutes les occurrences de bar sur cette ligne par baz.

:g/.*/

fera sur chaque ligne

17voto

user2571881 Points 1787
Ctrl-v ................ start visual block selection
6j .................... go down 6 lines
I" .................... inserts " at the beginning
<Esc><Esc> ............ finishes start
2fdl. ................. second 'd' l (goes right) . (repeats insertion)

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