Si je veux supprimer chaque mot, c'est facile, car je ferais quelque chose comme ceci:
:s%/WORD//g
Mais que faire si je veux faire xyz
à chaque occurrence de "WORD"? Par exemple, supposons que je souhaite supprimer toutes les lignes contenant "WORD". Je peux penser à quelques façons de le faire, mais aucune ne semble idéale.
1)
/WORD
puis appuyez manuellement ddnddnddnddn...
jusqu'à ce qu'il n'y ait plus d'occurrences. Mais cela prend du temps s'il y a beaucoup de lignes pour le faire.
2)
qd/WORD<enter>ddq
puis devinez combien de fois WORD se produit, puis, par exemple:
500@d
Mais cela va soit A) manquer un tas de lignes ou B) supprimer un tas de lignes supplémentaires.
Y a-t-il une meilleure manière de faire cela?
500@d
comme vous le décrivez est en fait sûr. La lecture de la macro s'arrêtera une fois le terme de recherche introuvable. Ainsi, vous verrez juste une erreur "Motif introuvable: WORD" après que toutes les lignes le contenant ont été supprimées.Réponses:
Vous pouvez utiliser les commandes
:global
et:normal
pour cela. La:global
commande a la syntaxe suivante:Cela exécutera la "commande" à chaque occurrence de "motif". Vous pouvez ensuite utiliser la
:normal
commande pour exécuter une série de frappes sur chaque occurrence d'un mot à l'aide:global
. Ainsi:Si ces frappes impliquent des touches spéciales comme
<Ctrl>
, vous pouvez les combiner avec la:execute
commande comme ceci:Notez que vous devez mettre une barre oblique inverse avant chaque occurrence d'une clé spéciale.
Pour plus d'informations sur ces commandes, voir
:help :normal
et:help :global
.la source
Juste pour être complet, vous pouvez utiliser
:substitute
, si vous faites correspondre - dans votre exemple (supprimez la ligne entière qui a WORD) - la ligne entière contenant WORD, par exemple:Ceci a un "remplacement de correspondance par rien" implicite, c'est-à-dire que c'est la forme la plus courte de:
Combiné avec
\zs
,\ze
,\(
-\)
(regroupement), et\=
(dans la pièce de rechange) avecsubmatch()
,:substitute
peut être très puissant.la source
Il semble que vous recherchiez
:global
.la source
:delete
et non le fonctionnement en mode normald
.:normal
. Et si vous avez besoin de clés spéciales, vous aurez peut-être même besoin:exe
-> `exe" normal aFooFar \ <esc> "