Dans Vim, j'ai le texte suivant:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
Je voudrais ajouter "," à 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 le mode bloc visuel pour accomplir cela?
Réponses:
Cela le fera à chaque ligne du fichier:
Si vous souhaitez créer un sous-ensemble de lignes au lieu du fichier entier, vous pouvez les spécifier à la place du fichier
%
.Une méthode consiste à effectuer une sélection visuelle, puis à taper le fichier
:
. Il se remplira:'<,'>
pour vous, puis vous tapez le reste (notez que vous n'avez qu'à ajouters/$/,/
)la source
'
, devrait être:'<,'>s/$/,/
.g
? (:'<,'>s/$/,/g
)/$/
correspondances une seule fois de toute façon.Il existe en fait un moyen de le faire en utilisant le mode bloc visuel. Une simple pression
$A
en mode Bloc visuel ajoute à 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 Esc.Voici donc une solution possible:
Autrement dit, en mode Normal, Visual sélectionnez un paragraphe
vip
, passez en mode Bloc visuel CTRLV, ajoutez$A
une virgule à toutes les lignes,
, puis appuyez sur Escpour confirmer.La documentation est à
:h v_b_A
. Il y a même une illustration de la façon dont cela fonctionne dans la section des exemples::h v_b_A_example
.la source
C-V
) puis déplacez le curseur à la fin de la ligne$
et ajoutez-les à toutesA
. Vous allez adorer:h v_b_A
, ce qui est vraiment approfondi.<C-V>ip
à la place devip<C-V>
.'virtualedit'
- j'ai testé cela.) Je confirme que cela ne fonctionne pas dans un vim propre. Merci pour la note!Une autre solution, utilisant une autre fonctionnalité intéressante:
Voir
:help :normal
.la source
:normal
. J'ai trouvé ça instructif!Le mode ex est le plus simple:
la source
La commande de substitution peut être appliquée à une sélection visuelle. Faites un bloc visuel sur les lignes que vous souhaitez modifier et tapez :, et notez que la ligne de commande est initialisé comme ceci:
:'<,'>
. Cela signifie que la commande de substitution fonctionnera sur la sélection visuelle, comme ceci:Et c'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:
Cela remplacera toute quantité d'espaces blancs précédant la fin de la ligne par une virgule, supprimant efficacement les espaces blancs de fin.
Les mêmes commandes peuvent fonctionner sur une plage de lignes, par exemple pour les 5 lignes suivantes:
:,+5s/$/,/
ou pour l'ensemble du tampon::%s/$/,/
.la source
Si vous voulez ajouter ',' à la fin des lignes commençant par 'key', utilisez:
la source
:g/key/s/$/,
. Voir:help :global
.J'ai
<M-DOWN>
mappé (flèche vers le bas)<DOWN>.
pour que je puisse répéter la dernière commande sur une série de lignes très rapidement. avec cette cartographie, je peux:Et puis maintenez alt tout en appuyant à plusieurs reprises pour ajouter la virgule à la fin de chaque ligne.
Cela fonctionne bien pour moi parce que cela permet un très bon contrôle sur ce que font les lignes et n'obtient pas le changement.
(J'ai également les autres flèches mappées de la même manière pour permettre une répétition facile de
.
)Voici la ligne de mappage à coller dans votre vimrc:
la source
$ correspond à la fin de la ligne
la source
$
à la ligne, pas seulement,
./g
est utilisé pour effectuer la substitution à chaque occurrence d'une ligne. Parce qu'il n'y en a qu'un$
dans une ligne, vous pouvez le déposer en toute sécurité.La macro suivante peut également être utilisée pour accomplir votre tâche.
la source