Rechercher et remplacer du texte dans vim en lignes spécifiques
Je peux utiliser
:5,12s/foo/bar/g
à la recherche pour foo
et de la remplacer par bar
entre les lignes 5 et 12. Comment puis-je le faire qu'à la ligne 5 et 12 (et non pas dans les lignes entre les deux)?
Vous devez vous connecter pour publier un commentaire.
Vim a spécial de l'expression régulière des atomes qui correspondent à certaines des lignes, des colonnes, etc.; vous pouvez les utiliser (éventuellement en plus de la gamme) pour limiter les matches:
Voir
:help /\%l
Vous pouvez faire de la substitution, à la ligne 5 et de le répéter avec un minimum d'effort sur la ligne 12:
Comme l'a souligné par Ingo,
:&
oublie de vos drapeaux. Puisque vous utilisez/g
, la commande correcte serait:&&
:Voir
:help :&
et amis.:&
à utiliser. Si il y a les drapeaux (s/../../g
), on doit utiliser:&&
, mais...\(\%5l\|\%12l\)
est plus obscur que:&
Vous pouvez toujours ajouter un
c
à la fin. Ce sera de demander la confirmation pour chaque et chaque match.g
drapeau dans le jeu)n
5 ou 6 fois est plus onéreux que l'ajout de\(\%5l\|\%12l\)
pour le remplacer déclaration?Question intéressante. Semble que il ya seulement de sélection de la plage et pas de plusieurs lignes de sélection:
http://vim.wikia.com/wiki/Ranges
Toutefois, si vous avez quelque chose de spécial sur la ligne 5 et 12, vous pouvez utiliser le
:g
de l'opérateur. Si votre fichier ressemble à ceci (numéros seulement pour la référence):Et vous souhaitez remplacer
one
pareno
sur les lignes où il y aenil
au lieu deline
:Vous pouvez utiliser
ed
- une ligne orientée éditeur de texte avec des commandes similaires à vi et vim. Elle est probablement antérieure à vi et vim.Dans un script (à l'aide d'un ici document qui traite l'entrée jusqu'à la EndCommand marqueur), il devrait ressembler à:
Évidemment, les commandes de ed peut être utilisé sur la ligne de commande aussi.
vim
alternative.:s
, mais il y a encore de la duplication de la:s
de commande (qui romainl solution évite).sed
, mais...