Substituer la n-ème occurrence d'un mot dans vim
J'ai vu d'autres questions relatives à la constatation de la n-ième occurrence d'un mot, motif, mais je ne pouvais pas trouver comment vous auriez fait remplaçant la n-ième occurrence d'un motif dans vim. Il y a le moyen le plus évident de codage en dur toutes les occurrences comme
:s/.*\(word\).*\(word\).*\(word\).*/.*.*.*newWord.*/g
Est-il une meilleure manière de faire ceci?
source d'informationauteur Gaurav Dadhania
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire un peu plus simplement à l'aide de plusieurs recherches. Le modèle vide dans le
:s/pattern/repl/
de commande des moyens de remplacer les plus récents résultats de recherche.Vous pouvez ensuite répéter plusieurs fois, en faisant
@:
ou même10@:
répéter la commande de 10 fois plus.Sinon, si je faisais ça de manière interactive, je voudrais faire quelque chose comme:
Qui permettrait de trouver la troisième occurrence de mot à partir du curseur, puis effectuer une substitution.
Pour plus d'informations,
travaille aussi pour remplacer 42th événement. Cependant, je préfère la solution donnée par Jean Kugelman qui est plus simple, même si elle ne se limite pas à la ligne en cours.
Remplacer chaque Nème occurrence de MOTIF dans un ligne à le REMPLACER.
Ceci répond à votre question, mais pas votre intention.
Vous avez demandé sur le remplacement de la n-ième occurrence d'un mot (mais semblait dire "au sein d'une ligne"). Voici une réponse à la question posée, dans le cas où quelqu'un le trouve, comme je l'ai fait =)
Pour bizarre tâches (comme la nécessité de remplacer toutes les 12 occurrences de "chien", avec "perroquet"), j'aime utiliser récursive enregistrements.
Premier vide de l'enregistrement dans @q
Maintenant démarrer un nouvel enregistrement dans q
Prochaine, de faire manuellement la chose que vous voulez faire (à l'aide de l'exemple ci-dessus, remplacez la 12e occurrence de "chien", avec "perroquet"):
supprimer "chien" et à s'insérer dans
type parrot
Maintenant jouer votre actuellement vide "@q" enregistrement
qui ne fait rien.
Enfin, l'arrêt de l'enregistrement:
Maintenant votre enregistrement dans @q s'appelle elle-même à la fin. Mais parce qu'il appelle l'enregistrement par nomil ne se vide pas plus. Donc, appelez l'enregistrement:
Il va rejouer l'enregistrement, puis à la fin, comme la dernière étape, la lecture elle-même à nouveau. Il va répéter jusqu'à la fin du fichier.
TLDR;
Bien, si vous ne
/gc
ensuite, vous pouvez compter le nombre de fois qu'il vous demande une confirmation, et aller de l'avant avec le remplacement lorsque vous arrivez à la nième 😀