Disons que j'ai le fichier très simple suivant
a
b
c
d
e
et j'ai décidé que je veux ajouter des lignes vides après chaque ligne. Plusieurs méthodes différentes me viennent immédiatement à l'esprit. Nous pourrions simplement le faire (et donc embrasser l'échec). Nous pouvons enregistrer une macro comme qqo<ESC>jq
et la répéter plusieurs fois.
Deux autres méthodes me semblaient plus évidentes à l'époque.
Tout d'abord, je pensais que j'émettrais la :norm
commande o
sur chaque ligne. Alors je cours :%norm o
. Mais ce qui se passe réellement, c'est que nous obtenons 5 lignes vides, suivies des lignes non séparées comme ci-dessus. J'interprète cela comme signifiant que par %norm
, vim récupère réellement le message émis la commande normale suivante sur les cinq premières lignes de ce fichier de cinq lignes . La o
commande crée une nouvelle ligne et vim est "stupide" dans le sens où elle fait référence par numéro de ligne et non par un autre identifiant.
Eh bien, j'étais gêné. Sûr. J'ai essayé quelques autres choses pour voir si je pouvais faire fonctionner la méthode ci-dessus, mais hélas, je ne pouvais pas. Par curiosité, j'ai essayé mon autre méthode préférée d'application en masse. Cela m'a amené à essayer :g/^/norm o
. À ma grande surprise, cela fonctionne très bien! Donc à mes yeux, il semble que vim ne soit pas "idiot" ici de la même manière que ci-dessus et référence les lignes par plus qu'un simple numéro de ligne.
Que se passe-t-il exactement?
la source
:%s/$/\r/
ou comme ceci::%s/\n/\r\r/
. La conclusion est que les nouvelles lignes peuvent être associées\n
, mais doivent être écrites comme\r
des valeurs de remplacement.Réponses:
Eh bien,
%
c'est un raccourci pour1,$
(une plage allant de la première ligne à la dernière). De:he :%
:Et pour
:global
:Ainsi, le premier cas est comme parcourir une liste tout en la modifiant, donc un compteur sur des éléments de liste devient invalide. Dans le deuxième cas, nous marquons les éléments que nous voulons cibler en une seule passe, de sorte que même si la liste est modifiée lors de la deuxième passe, nous savons toujours sur quels éléments nous voulons travailler.
la source
g
est exagérément fou utile. je dois passer plus de temps pour passer d'un utilisateur vi moyen à un utilisateur