100 votes

Dans Vim, remplacer toutes les occurrences du terme courant sous le curseur

Si vous appuyez sur * dans Vim, l'éditeur recherchera la prochaine occurrence du terme dans le même fichier. Cela vous évite d'avoir à taper le terme.

Existe-t-il un moyen rapide de remplacer le terme actuellement sous le curseur par un nouveau terme ? Un seul caractère pour lancer la commande, en tapant le nouveau terme, puis Enter .

0 votes

Vous pouvez également utiliser n pour suivant et b pour retour (précédent) match.

0 votes

@Orwellophile seulement n fonctionne pour moi b revient à la valeur par défaut (début du mot) # fonctionne pour moi comme prévu, ce qui remonte au mandat précédent.

0 votes

@JohnnyQ Désolé Johnny, je devais être sous l'emprise de la colle. n pour le prochain et N pour le précédent. C'est écrit sur mon clavier, je ne sais donc pas comment j'ai pu me tromper.

178voto

Matteo Riva Points 14340

Il suffit d'utiliser * et ensuite :

:%s//new value/

Si vous ne spécifiez pas de modèle, la commande de substitution utilise le dernier modèle recherché. En fonction de la valeur de gdefault dans votre configuration, il se peut que vous deviez ajouter un /g à cette commande.

3 votes

Et si new value contient un & ou un / il suffit de l'échapper avec ``.

0 votes

@sjas Que fait :se gd ?

0 votes

:se gd o :set gdefault indique à vim de traiter chaque motif comme s'il avait un modificateur /g à la fin (plus précisément, il inverse la signification du drapeau /g, donc si vous l'utilisez avec gdefault active, elle désactive l'effet)

107voto

skeept Points 4459

Vous pouvez utiliser :

:%s/<c-r><c-w>/new value/g

<c-r><c-w> signifie taper littéralement CTRL - rCTRL - w pour insérer le mot sous le curseur.

2 votes

Il serait bon d'expliquer la signification de chaque commande ici :)

22voto

Lieven Keersmaekers Points 32396

En plus des autres réponses, vous pouvez économiser quelques frappes supplémentaires en ajoutant l'extrait suivant à votre fichier .vimrc pour effectuer une recherche et un remplacement globaux.

" Search and replace word under cursor using F4
nnoremap <F4> :%s/<c-r><c-w>/<c-r><c-w>/gc<c-f>$F/i

1 votes

J'adore, c'est la meilleure réponse que j'ai trouvée sur Internet jusqu'à présent ;)

5voto

Chiedo John Points 496

Je suis allé de l'avant et j'ai créé un plugin qui vous permet d'entrer simplement ce qui suit :

:Dr REPLACEVALUE

https://github.com/chiedojohn/vim-dr-replace

3voto

etuardu Points 1720

Une autre option consiste à utiliser gn :

Recherche en avant du dernier modèle de recherche utilisé, l n et lancez le mode visuel pour sélectionner le match.
Si le curseur se trouve sur la correspondance, il la sélectionne visuellement.
Si un opérateur est en attente, il opère sur la correspondance.
Par exemple, "dgn" supprime le texte de la correspondance suivante.
Si le mode visuel est actif, il prolonge la sélection jusqu'à la fin de la fenêtre prochain match.
Note : Contrairement aux n la direction de la recherche ne dépend pas de la commande de recherche précédente.

Ainsi, si vous avez FOO comme dernière expression de recherche, vous pouvez remplacer sa prochaine correspondance par BAR dactylographie cgnBAR<Esc> et répétez l'opération pour les correspondances suivantes avec . .

Si vous voulez définir le mot sous le curseur comme expression de recherche, vous pouvez taper *N (ou *# ) pour rechercher la correspondance suivante et revenir.

Par exemple, si votre curseur se trouve sous le premier FOO dans cette ligne :

<div class="FOO"><span id="FOO"><b>FOO:</b> FOO</span></div>

et vous tapez *NcgnBAR<Esc>... et vous obtenez ceci :

<div class="BAR"><span id="BAR"><b>BAR:</b> BAR</span></div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X