88 votes

Masquer toutes les lignes (non) correspondantes dans Vim

Est-il possible d'afficher/masquer toutes les lignes correspondantes dans vi ou Vim ? Pas de mettre en évidence, mais d'afficher uniquement ces lignes.

Par exemple j'ai un texte avec le mot le mot ERROR . Comment faire pour qu'il n'affiche que les lignes contenant ERROR et comment afficher uniquement les lignes sans ERROR ?

Existe-t-il une solution sans supprimer toutes les lignes correspondantes et ensuite les défaire ?

0 votes

111voto

user55400 Points 1969

Connaissez-vous le :global commande ? Est-ce que cela fait ce que vous voulez ?

:g/ERROR

et pour le contraire :

:g!/Error

ou de manière équivalente :

:v/Error

20 votes

Ce n'est pas très bon. Une fois que vous faites défiler jusqu'en bas, la commande se termine et tout réapparaît. Le contenu n'est pas vraiment caché.

0 votes

@KanLi hit g< à revoir, ou @: si vous n'avez pas exécuté et commandé.

0 votes

Vous pouvez supprimer :v/Error /d pour récupérer l'annulation "u".

54voto

studgeek Points 4617

Une autre approche, en fonction de votre cas d'utilisation, serait d'utiliser vimgrep et ses résultats dans quickfix . Vous pouvez effectuer les opérations suivantes :

:vimgrep pattern % recherchera le fichier en cours et vous amènera au premier résultat de la recherche. Plus important encore, il place également les résultats dans la "liste des corrections rapides".

:copen ouvrira alors la liste des corrections rapides dans une fenêtre séparée. Vous aurez donc une fenêtre séparée avec toutes les lignes de votre dernier vimgrep. Dans la fenêtre de correction rapide, vous pouvez alors appuyer sur la touche Entrée ou double-cliquer sur une ligne pour accéder à la ligne correspondante dans votre fichier original.

:colder vous permettra de revenir aux anciennes listes de corrections rapides (anciens résultats de vimgrep). Et :cnewer avance vers des résultats de recherche plus récents.

Notez que la liste des corrections rapides est également mise à jour lors de l'exécution de la commande :make (c'est pourquoi il est appelé quickfix pour la correction des erreurs). Pour cette raison, il existe également une alternative à la liste quickfix appelée "liste de localisation". Pour l'utiliser à la place, vous devez utiliser :lvimgrep Dans ce cas, utilisez des commandes à préfixe l plutôt que des commandes à préfixe c. :lopen , :lolder , :lnewer .

Il y a, bien sûr, beaucoup d'autres choses que vous pouvez faire. Voir :help quickfix pour plus d'informations.

PS, vous avez dit que vous ne vouliez pas d'une approche qui supprime des lignes et les annule ensuite. Mais puisque vous avez marqué g/ERROR comme la réponse, j'ai pensé qu'une manière rapide et sale est de faire g!/ERROR/d . Vous pouvez ensuite l'annuler facilement en utilisant u . Aussi pour info, vous pouvez faire :set hlsearch pour mettre en évidence les motifs assortis à :g des commandes.

1 votes

Merci pour l'astuce sur ":g!/ERROR/d" meilleure que la réponse acceptée.

0 votes

Pouvez-vous faire cela avec des lignes pas correspondant au modèle ?

39voto

Mykola Golubyev Points 21210

Vous pouvez utiliser

:g/ERROR/

pour imprimer toutes les lignes avec ERROR

Il existe également un plugin Vim que j'ai vu plusieurs fois mais que je n'ai pas utilisé : foldsearch : supprimer les lignes qui ne correspondent pas à un modèle donné.

15 votes

+1 pour le lien vers le plugin foldsearch. Il est discret et peut s'avérer utile.

27voto

shivi Points 121

La meilleure façon de procéder est->

:vimgrep /something/g % | copen

Cela ouvrira la liste des correspondances pour votre mot-clé et ne montrera que les lignes correspondantes dans la fenêtre de Quickfix.

Remplacez % par le chemin d'accès au fichier s'il ne s'agit pas du fichier actuel.

1 votes

Remplacez % par le chemin d'accès au fichier si vous ne considérez pas le fichier actuel.

0 votes

Pouvez-vous le faire avec des lignes no correspondant au modèle ?

2voto

sevvalai Points 59

:vimgrep /something/g % | copen fonctionne très bien. Aussi :g/<pattern>/d peut être utilisé pour supprimer les lignes avec le motif

0 votes

C'est exactement une autre réponse à cette question.

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