78 votes

Est-il possible de supprimer interactivement un motif de recherche correspondant dans Vim ?

Il y a une phrase que je veux rechercher dans Vim. Une fois trouvée, je veux supprimer cette occurrence de la phrase. Quel est le moyen le plus simple de parcourir toutes les occurrences (par l'intermédiaire de  n ), et supprimer une correspondance une par une (je ne veux pas toutes les supprimer d'un coup).

Note : Je sais que je peux supprimer un certain nombre de caractères ou un certain nombre de mots, mais je veux supprimer spécifiquement la correspondance de ma recherche. Est-ce possible ?

118voto

Dan Spiteri Points 624

http://vim.wikia.com/wiki/Search_and_replace

Essayez cette recherche et ce remplacement :

:%s/foo/bar/gc

Changez chaque "foo" en "bar", mais demandez d'abord confirmation.

Appuyez sur y ou n pour modifier ou conserver votre texte.

47voto

ghbarratt Points 4468

Il y a 3 façons auxquelles je peux penser :

La façon la plus facile à expliquer est

:%s/phrase to delete//gc

mais vous pouvez aussi (personnellement j'utilise plus souvent cette deuxième solution) faire une recherche régulière de la phrase à supprimer

/phrase to delete

Vim vous amènera au début de l'occurrence suivante de la phrase.

Passez en mode insertion (touche i) et utilisez la touche Suppr pour supprimer la phrase.

Appuyez sur Echap lorsque vous avez supprimé toute la phrase.

Maintenant que vous l'avez fait une fois, vous pouvez appuyer sur la touche n pour passer à l'occurrence suivante de la phrase et ensuite appuyer sur la touche point/période "." pour effectuer l'action de suppression que vous venez d'effectuer.

Continuez à appuyer sur n et sur point jusqu'à ce que vous ayez terminé.

Enfin, vous pouvez effectuer une recherche de la phrase à supprimer (comme dans la deuxième méthode) mais cette fois, au lieu de passer en mode insertion, vous

Comptez le nombre de caractères que vous voulez supprimer

Tapez ce numéro (avec les touches numériques)

Appuyez sur la touche x - les caractères devraient être supprimés

Continuez avec n et point comme dans la deuxième méthode.

PS - Et si vous ne le saviez pas déjà, vous pouvez faire un n majuscule pour reculer dans les résultats de la recherche.

15voto

ib. Points 14520

1.  À mon avis, le moyen le plus pratique est de rechercher d'abord une occurrence, puis d'invoquer la fonction suivante :substitute commandement :

:%s///gc

Puisque le modèle est vide, cette :substitute La commande recherchera les occurrences du dernier modèle de recherche utilisé, puis les remplacera par la chaîne vide, en demandant à chaque fois la confirmation de l'utilisateur, réalisant ainsi exactement le comportement souhaité.

2.  S'il s'agit d'un modèle courant dans les habitudes d'édition, on peut définir en outre un couple de mappages de sélection de texte-objet pour opérer spécifiquement sur la correspondance du dernier motif de recherche sous le curseur. Les deux mappages suivants peuvent être utilisés à la fois en mode visuel et en mode "opérateur en attente" pour sélectionner l'objet de texte. mode visuel et en attente d'opérateur pour sélectionner le texte de la correspondance précédente du dernier motif de recherche.

vnoremap <silent> i/ :<c-u>call SelectMatch()<cr>
onoremap <silent> i/ :call SelectMatch()<cr>
function! SelectMatch()
    if search(@/, 'bcW')
        norm! v
        call search(@/, 'ceW')
    else
        norm! gv
    endif
endfunction

En utilisant ces mappages, on peut supprimer la correspondance sous le curseur avec di/ ou appliquer tout autre opérateur ou le sélectionner visuellement avec vi/ .

11voto

Josh Points 3539

Le meilleur moyen est probablement d'utiliser :

:%s/phrase//gc

c demande une confirmation avant chaque suppression. g permet d'effectuer plusieurs remplacements sur la même ligne.

Vous pouvez également effectuer une recherche en utilisant /phrase sélectionnez le match suivant avec gn et le supprimer avec d .

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