Masquer toutes les lignes (non) correspondantes dans Vim

87

Est-il possible d'afficher / masquer toutes les lignes correspondantes dans vi ou Vim? Ne mettez pas en surbrillance mais affichez simplement 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 ERRORet comment afficher uniquement les lignes sans ERROR?

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

Alex Bolotov
la source

Réponses:

109

Connaissez-vous la :globalcommande? Est-ce que cela fait ce que vous voulez?

:g/ERROR

et pour le contraire:

:g!/Error

ou équivalent:

:v/Error
user55400
la source
19
Ce n'est pas très bon. Une fois que vous faites défiler vers le bas, la commande se termine et tout réapparaît. Il ne cache pas vraiment ces contenus.
Kan Li
@KanLi frappé g<pour voir à nouveau, ou @:si vous n'avez pas exécuter et commandes.
D.Ben Knoble
53

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

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

:copenouvrira alors la liste des correctifs rapides dans une fenêtre de correction rapide distincte. 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 ensuite appuyer sur Entrée ou double-cliquer sur une ligne pour sauter à la ligne correspondante dans votre fichier d'origine.

:coldervous permettra de revenir aux anciennes listes de correctifs rapides (anciens résultats de vimgrep). Et :cnewerpasse aux résultats de recherche plus récents.

Notez que la liste des correctifs rapides est également mise à jour lors de l'exécution :make(c'est pourquoi elle est appelée correction rapide pour corriger les erreurs). Pour cette raison, il existe également une alternative à la liste de correctifs rapides appelée "liste des emplacements". Pour l' utiliser , vous utilisez à la place :lvimgrep, utilisez les commandes préfixé l plutôt que des commandes c préfixée - :lopen, :lolder, :lnewer.

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

PS, vous avez dit que vous ne vouliez pas d'une approche qui supprime les lignes puis les annule. Mais puisque vous avez marqué g/ERRORcomme réponse, j'ai pensé que je voudrais souligner une manière rapide et sale de le faire g!/ERROR/d. Vous pouvez ensuite l'annuler facilement en utilisant u. Aussi FYI, vous pouvez faire :set hlsearchpour mettre en évidence les motifs correspondant aux :gcommandes.

studgeek
la source
1
Merci pour le conseil sur ": g! / ERROR / d" mieux que la réponse acceptée.
VinGarcia
Pouvez-vous faire cela avec des lignes ne correspondant pas au motif?
Jacktose
26

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

:vimgrep /something/g % | copen

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

Remplacez% par le chemin du fichier si vous ne prenez pas en compte le fichier actuel.

Shivendra
la source
1
Remplacez% par le chemin du fichier si vous ne considérez pas le fichier actuel.
Shivendra
Pouvez-vous faire cela avec des lignes ne correspondant pas au motif?
Jacktose
1

:vimgrep /something/g % | copenfonctionne à merveille. :g/<pattern>/dPeut également être utilisé pour supprimer des lignes avec le motif

Sevvalai
la source
C'est exactement une autre réponse à cette question.
Shivendra
1

au cas où vous utiliseriez, fzfvous pouvez utiliser:

  • :Lines dans tous les fichiers ouverts
  • :BLines uniquement dans le tampon ouvert
  • :Rg [pattern] en utilisant ripgrep
moinsf
la source
1

Une manière sale et hackeuse de faire cela:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)
Boris Churzin
la source
0

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

charkh
la source