2009-05-14 5 views
66

Est-il possible d'afficher/masquer toutes les lignes correspondantes dans vi ou Vim? Ne pas mettre en évidence mais juste montrer seulement ces lignes. Par exemple, j'ai un texte avec le mot ERROR. Comment faire pour afficher uniquement les lignes contenant ERROR et comment afficher uniquement les lignes sans ERROR?Cacher tout (non) les lignes correspondantes dans Vim

Existe-t-il une solution sans supprimer toutes les lignes correspondantes, puis de les annuler?

+0

http://vi.stackexchange.com/q/2280/12111 – graceman9

Répondre

76

-vous connaître la commande :global? Est-ce que cela fait ce que vous voulez?

:g/ERROR 

et pour le contraire:

:g!/Error 

ou de façon équivalente:

:v/Error 
+14

Ce n'est pas très bon. Une fois que vous faites défiler vers le bas, la commande se termine et tout s'affiche à nouveau. Ce n'est pas vraiment cacher ces contenus. –

34

Vous pouvez utiliser

:g/ERROR/ 

pour imprimer toutes les lignes avec erreur

Il y a également un plugin Vim que j'ai vu plusieurs fois, mais ne pas utiliser: foldsearch : fold away lines that don't match a given pattern

+12

+1 pour le lien vers le plugin foldsearch. C'est discret et peut être utile. – user55400

+0

+1 pour le plugin foldsearch. Life Saver! –

42

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 actuel et vous amènera au premier résultat de recherche. Plus important encore, il met également les résultats dans la "liste quickfix".

:copen va alors ouvrir la liste des corrections rapides dans une fenêtre de raccourci séparée. Vous aurez donc une fenêtre séparée avec toutes les lignes de votre dernier vimgrep. Dans la fenêtre quickfix, vous pouvez appuyer sur Entrée ou double-cliquer sur une ligne pour accéder à la ligne correspondante de votre fichier d'origine.

:colder vous permettra de revenir à d'anciennes listes de raccourcis (anciens résultats de vimgrep). Et :cnewer va de l'avant aux résultats de recherche plus récents.

Notez que la liste quickfix est également mise à jour lors de l'exécution :make (c'est pourquoi son Quickfix appelé 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, utilisez :lvimgrep, puis utilisez les commandes l-préfixées plutôt que les commandes c-préfixées - :lopen, :lolder, :lnewer.

Il y a, bien sûr, beaucoup plus 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 les lignes et les annule ensuite. Mais puisque vous avez marqué g/ERROR comme réponse, je pensais que je voudrais souligner un moyen rapide et sale est de faire g!/ERROR/d. Vous pouvez ensuite facilement l'annuler en utilisant u. Aussi FYI, vous pouvez faire :set hlsearch pour mettre en évidence les modèles correspondant à :g commandes.

+0

Merci pour le conseil sur ": g!/ERROR/d" mieux que la réponse acceptée. – VinGarcia

0

Vous voulez dire probablement commande en moins vi vim &/modèle/ qui montre les lignes contenant/modèle/(comme grep).

12

La meilleure façon de le faire iS>

:vimgrep /something/g % | copen 

Cela ouvrira la liste des correspondances pour votre mot-clé et aussi affichera uniquement les lignes correspondants dans la fenêtre quickfix.

+0

Remplacez% par le chemin du fichier si vous ne tenez pas compte du fichier actuel. – Shivendra

+0

très utile !!!! Je vous remercie!!! – ihightower

Questions connexes