Vim édition multiligne comme en sous-texte?

J’ai commencé à utiliser gvim, et je ne comprends pas très bien 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 un insert 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; 

Qu’est-il arrivé? Je m’attendais à un comportement similaire à celui de sublimetext:

entrer la description de l'image ici

Si vous ne savez pas comment cela fonctionne, il ne fait que répéter les actions pour chaque ligne. Comment peut-on y arriver? Et qu’est-ce que vim fait ici?

Faites-vous une faveur en déposant le calque de compatibilité Windows.

Le raccourci normal pour accéder au mode Visual-Block est .

D’autres ont traité des macros d’enregistrement, voici quelques autres idées:

Utiliser uniquement le mode bloc visuel .

  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. Appuyez sur pour passer en mode bloc visuel et développez 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" pour 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. Appuyez sur pour passer en mode bloc visuel et développez 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" pour 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 le mode 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. Appuyez sur pour passer en mode bloc visuel et développez votre sélection vers le bas et 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 avec”:

     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 le mode ligne visuelle et :normal .

  1. Appuyez sur V pour sélectionner la ligne entière et développez-la 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"eea" pour 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 des commandes en mode normal sur une gamme de lignes (la partie '< ,'> est ajoutée 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

    • est le moyen de Vim d’entrer un caractère de contrôle dans ce contexte, ici c’est utilisé pour quitter le mode insertion

    • ee se déplace à la fin du mot suivant

    • a" ajoute un " après le curseur

    • exécute la commande

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

     :'< ,'>norm ^wvees" 

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

Je pense que celui-ci semble prometteur:

Il a semblé abandonné pendant un certain temps, mais a eu quelques consortingbutions en 2014.

Il est assez puissant, même s’il m’a fallu un peu de temps pour m’habituer au stream (ce qui est plutôt sublime, mais modal comme Vim).

D’après mon expérience, si vous avez beaucoup d’autres plug-ins installés, vous pouvez rencontrer des conflits!

Il y a quelques autres tentatives à cette fonctionnalité:

N’hésitez pas à les modifier si vous remarquez une de ces améliorations.

Il y a plusieurs façons d’accomplir cela dans Vim. Je ne sais pas lesquels sont les plus semblables à ceux de Sublime Text.


Le premier serait via le 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 insérez une double citation. Appuyez sur pour répéter l’opération sur chaque ligne.


Le second est via les macros. Placez le curseur sur le premier caractère et commencez à enregistrer une macro avec qa . Allez à droite avec llll , entrez le mode insertion avec a , mettez une double citation, quittez le mode insertion, et revenez au début de votre ligne avec (ou équivalent). Appuyez sur j pour descendre d’une rangée. Arrêtez l’enregistrement avec q . Et puis rejouez la macro avec @a . Plusieurs fois.


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

Si vous utilisez la commande “global”, vous pouvez répéter ce que vous pouvez faire sur un site en ligne, quel que soit le nombre de lignes.

 :g//. 

Exemple:

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

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

 :g/.*/ 

fera sur chaque ligne

Je ne suis pas sûr de ce que fait vim , mais c’est un effet intéressant. La façon dont vous décrivez ce que vous voulez ressemble plus à la façon dont fonctionnent les macros ( :help macro ). Quelque chose comme ça ferait ce que vous voulez avec les macros (en mode normal):

  1. qa : enregistre la macro dans a registre.
  2. 0w : 0 aller au début de la ligne, w sauter un mot.
  3. i" : Entrez en mode insertion, insérez un " et revenez au mode normal.
  4. 2e : Aller à la fin du deuxième mot.
  5. a" : Ajouter un " .
  6. jq Passer à la ligne suivante et terminer l’enregistrement de macro.

Ensemble: qa0wi"2ea"

Maintenant, vous pouvez exécuter la macro avec @a , répétez la dernière macro avec @@ . Pour appliquer au rest du fichier, faites quelque chose comme 99@a qui suppose que vous n’avez pas plus de 99 lignes, l’exécution des macros se terminera quand il atteindra la fin du fichier.

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

  1. Accédez à l’endroit où vous souhaitez que le premier devis soit.
  2. Entrez en visual-block-mode , sélectionnez les lignes que vous souhaitez affecter, G pour aller au bas du fichier.
  3. Hit I" .
  4. Placez-vous au prochain endroit où vous voulez insérer un " .
  5. Vous voulez répéter ce que vous venez de faire si simple . suffira.
 Ctrl-v ................ start visual block selection 6j .................... go down 6 lines I" .................... inserts " at the beginning  ............ finishes start 2fdl. ................. second 'd' l (goes right) . (repeats insertion)