Je sais que c'est une vieille question, et la manière de @ mykola-golubyev EST évidemment la meilleure réponse pour le cas particulier de la question OP (qui, je suppose, passe par un code obscurci où vous êtes susceptible d'avoir plusieurs blocs avec les mêmes noms de var) ; mais avec le nom de la question comme celui-là, de nombreuses personnes qui viennent ici à partir de recherches Google recherchent probablement des moyens moins spécifiques à la situation pour renommer les variables dans VIM - et ceux-ci peuvent être plus concis
Je suis surpris que personne n'ait suggéré de cette façon:
*
:s//
NOUVEAU NOM /gc
Le *
est le même que gn
- il recherche l'occurrence suivante du mot sous le curseur ET il devient le dernier modèle recherché, donc lorsque vous omettez le modèle de recherche dans la commande de remplacement, VIM suppose que c'est le modèle à rechercher.
Pour de petites quantités de copies var, une copie encore plus rapide:
*
cw
NEWNAME <esc>
puis répétez n.
pour d'autres occurrences
Recherche d'occurrence, cw
commande de changement de mot , n
passe à l'occurrence suivante du dernier terme recherché et .
répète la dernière commande (qui est de changer le mot en NEWNAME )
(Crédits pour moi sachant tout cela, allez à @doomedbunnies sur Reddit )
Une autre astuce intéressante est la suivante: ( crédits à @ nobe4 )
*
cgn
NEWNAME <esc>
puis répétez .
pour d'autres occurrences
cgn
est "changer tout ce qui est le résultat de (trouver l'occurrence suivante)". Maintenant que c'est la dernière commande , vous n'avez pas besoin n
de passer à l'occurrence suivante, donc moins de coups à nouveau, et, plus important encore, pas besoin d'alterner n
et.
. Mais, évidemment, celui-ci présente l'inconvénient de ne pas avoir de moyen de sauter une occurrence.
Voici quelques avantages:
- pas de mappage, pas de .vimrc (ou init.vim), vous pouvez donc l'utiliser dans n'importe quelle copie VIM que vous rencontrez (par exemple, une tâche rapide sur certains VPS ou la machine de votre ami où la configuration de VIM à votre manière irait à l'encontre de l'objectif de `` rapide '' )
- en utilisant
*
ougn
pour la sélection de mots est très rapide - une seule touche (enfin, disons 1,5)
- en utilisant
*
ou gn
s'assure que vous n'obtenez aucune correspondance dans d'autres mots, tout comme le :%s/<C-R>//gc
fait. Beats en tapant le :%s/\<OLDNAME\>/NEWNAME/gc
à la main: personnellement, j'ai tendance à oublier d'utiliser le\<
choses pour limiter les correspondances à des mots entiers uniquement.
- Ne pas utiliser la lunette entraînera seulement quelques coups supplémentaires
n
pour sauter les matchs indésirables - probablement encore moins que les coups supplémentaires nécessaires pour limiter la portée. Dans des circonstances normales, vos variables sont probablement quelque peu localisées dans un certain bloc de code de toute façon.