Comment append du texte à la fin de chaque ligne dans Vim?

Dans Vim, j’ai le texte suivant.

key => value1 key => value2 key => value1111 key => value12 key => value1122222 

Je voudrais append “,” à la fin de chaque ligne. Le texte précédent deviendra le suivant:

 key => value1, key => value2, key => value1111, key => value12, key => value1122222, 

Est-ce que quelqu’un sait comment faire ça? Est-il possible d’utiliser un bloc visuel pour accomplir cela?

Cela le fera à chaque ligne du fichier:

 :%s/$/,/ 

Si vous voulez faire un sous-ensemble de lignes au lieu du fichier entier, vous pouvez les spécifier à la place du % .

L’une des méthodes consiste à effectuer une sélection visuelle, puis à taper : Il va remplir :'<,'> pour vous, puis vous tapez le rest (notez que vous devez seulement append s / $ /, /)

 :'<,'>s/$/,/ 

Il existe en fait un moyen de le faire en utilisant le mode bloc Visual. Il suffit d’appuyer sur $A en mode bloc visuel pour append à la fin de toutes les lignes de la sélection. Le texte ajouté apparaîtra sur toutes les lignes dès que vous appuyez sur Echap .

C’est donc une solution possible:

 vip$A, 

Autrement dit, en mode Normal, Visual sélectionnez un vip paragraphe, passez en mode de bloc Visual CTRL V , ajoutez une virgule à toutes les lignes $A , puis appuyez sur Echap pour confirmer.

La documentation est à :h v_b_A . Il y a même une illustration de son fonctionnement dans la section des exemples :h v_b_A_example .

Une autre solution, utilisant une autre fonctionnalité intéressante:

 :'<,'>norm A, 

Voir :help :normal .

Le mode ex est le plus facile:

 :%s/$/, : - enter command mode % - for every line s/ - substitute $ - the end of the line / - and change it to , - a comma 

La commande de substitution peut être appliquée à une sélection visuelle. Faites un bloc visuel sur les lignes que vous souhaitez modifier, puis tapez : et notez que la ligne de commande est initialisée comme ceci :'<,'> . Cela signifie que la commande de remplacement fonctionnera sur la sélection visuelle, comme ceci:

 :'<,'>s/$/,/ 

Et ceci est une substitution qui devrait fonctionner pour votre exemple, en supposant que vous voulez vraiment la virgule à la fin de chaque ligne comme vous l’avez mentionné. S’il y a des espaces à la fin, vous devrez peut-être ajuster la commande en conséquence:

 :'<,'>s/\s*$/,/ 

Cela remplacera tout espace blanc précédant la fin de la ligne par une virgule, supprimant ainsi les espaces blancs.

Les mêmes commandes peuvent fonctionner sur une gamme de lignes, par exemple pour les 5 lignes suivantes :,+5s/$/,/ , ou pour la totalité du tampon :%s/$/,/ .

Si vous voulez append ‘,’ à la fin des lignes commençant par ‘key’, utilisez:

 :%s/key.*$/&, 
 :%s/$/,/g 

$ correspond à la fin de la ligne

J’ai (flèche bas alt) mappé sur . afin que je puisse répéter la dernière commande sur une série de lignes très rapidement. avec cette cartographie je peux:

 A, 

Et puis maintenez la touche alt tout en appuyant plusieurs fois sur pour append la virgule à la fin de chaque ligne.
Cela fonctionne bien pour moi car cela permet un très bon contrôle de ce que les lignes font et ne reçoivent pas le changement.
(J’ai aussi les autres flèches mappées de manière similaire pour permettre de répéter facilement . )

Voici la ligne de mappage à coller dans votre vimrc:

 map  . 

La macro suivante peut également être utilisée pour accomplir votre tâche.

 qqA,^[0jq4@q