Pour éditer plusieurs lignes, en leur ajoutant, par exemple, du texte à chaque début et fin de ligne, il existe une méthode simple mais pas toujours connue du vimeur qui sommeille en chacun de nous.

Exemple de lignes à éditer

"https://une_url.com",
"https://une_url.com",
"https://une_url.com",

Résultat souhaité :

{src="https://une_url.com"},
{src="https://une_url.com"},
{src="https://une_url.com"},

Placez votre curseur sur le début de la première ligne. Puis sélectionnez toutes les lignes avec le mode visual <Shift> + v puis 2j pour descendre de 2 lignes. Et enfin : pour ouvrir la commande une fois les 3 lignes sélectionnées.

Puis taper la commande suivante :

:'<,'>norm! i{src=<Esc>f,i}

⚠️ La touche <Esc> peut être faite dans ce contexte via <Ctrl> + v puis <Esc>.

Explication de la commande

  • norm (abréviation de normal) indique que pour chaque ligne sélectionnée nous passons en mode normal
  • ! force l’exécution de la commande sans appliquer vos mappings ou plugins (dans mon cas autoclose me rajouterait une fermeture } non souhaitée après le src=)
  • i indique qu’on passe en mode insertion et qu’à partir de maintenant tous les caractères seront insérés sur chaque ligne (dans notre cas src=)
  • <Esc> pour s’échapper du mode insertion
  • f, déplace le curseur jusqu’à la première virgule
  • i pour repasser en mode insertion et écrire l’accolade fermante

Quelques cas pratiques supplémentaires

Commenter une sélection

:'<,'>norm! I//

Mettre en majuscule le premier caractère de chaque ligne

:'<,'>norm! gUl

Exécuter une macro sur chaque ligne

:'<,'>norm! @a

Une technique magique

Comme vous l’aurez compris cette “technique” permet d’appliquer n’importe quelle commande de mode normal à plusieurs lignes, sans passer par des macros ou le mode bloc.

Bref, ça peut vous faire gagner pas mal de temps dans certains cas.