web-dev-qa-db-fra.com

Masquer toutes les lignes (ne) correspondantes dans Vim

Est-il possible d'afficher/masquer toutes les lignes correspondantes dans vi ou Vim? Ne pas mettre en évidence mais montrer seulement ces lignes.

Par exemple, j'ai un texte avec Word le mot ERROR. Comment faire en sorte qu'il affiche uniquement 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 l'annuler?

73
Alex Bolotov

Connaissez-vous la commande :global? Est-ce que ça fait ce que tu veux?

:g/ERROR

et pour le contraire:

:g!/Error

ou équivalent:

:v/Error
88
user55400

Une autre approche en fonction de votre cas d'utilisation serait d'utiliser vimgrep et ses résultats dans quickfix . Vous pouvez faire ce qui suit:

:vimgrep pattern % va rechercher le fichier actuel et vous amène au premier résultat de la recherche. Plus important encore, il place également les résultats dans la "liste des correctifs rapides". 

:copen ouvrira ensuite la liste des correctifs dans une fenêtre distincte de correctif. Ainsi, vous aurez une fenêtre séparée avec toutes les lignes de votre dernier vimgrep. Dans la fenêtre de correction rapide, vous pouvez ensuite 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 aux anciennes listes de correctifs (anciens résultats de vimgrep). Et :cnewer affiche les résultats de recherche les plus récents.

Notez que la liste de correctifs est également mise à jour lors de l’exécution de :make (c’est pourquoi on appelle son correctif pour corriger les erreurs). Pour cette raison, il existe également une alternative à la liste de correctifs appelée "liste d'emplacement". Pour l'utiliser, utilisez plutôt :lvimgrep, puis des commandes à préfixe l plutôt que des commandes à préfixe c: :lopen, :lolder, :lnewer.

Bien sûr, vous pouvez faire beaucoup plus. Voir :help quickfix pour plus d'informations.

PS, vous avez dit que vous ne souhaitiez pas une approche qui supprime les lignes, puis les annule. Mais puisque vous avez marqué g/ERROR comme réponse, j’ai pensé que je ferais remarquer une manière rapide et sale de faire g!/ERROR/d. Vous pouvez ensuite facilement l'annuler en utilisant u. Également pour votre information, vous pouvez utiliser :set hlsearch pour mettre en surbrillance les motifs associés aux commandes :g.

48
studgeek

Vous pouvez utiliser

:g/ERROR/

imprimer toutes les lignes avec ERROR

Il y a aussi un plugin Vim que j'ai vu plusieurs fois mais que je n'ai pas utilisé: foldsearch: plie les lignes qui ne correspondent pas à un modèle donné

35
Mykola Golubyev

La meilleure façon de faire est->

:vimgrep /something/g % | copen

Cela ouvrira la liste des correspondances pour votre mot clé et affichera uniquement les lignes correspondantes dans la fenêtre de correction rapide.

17
Shivendra

:vimgrep /something/g % | copen fonctionne à merveille. De plus, :g/<pattern>/d peut être utilisé pour supprimer des lignes avec le motif

0
sevvalai

Vous voulez probablement dire la commande dans moins vi vim &/pattern/ qui montre les lignes contenant/pattern/(comme grep).

0
charkh

au cas où vous utiliseriez fzf, vous pourriez utiliser:

  • :Lines dans tous les fichiers ouverts
  • :BLines uniquement dans un tampon ouvert
  • :Rg [pattern] en utilisant ripgrep
0
minusf