Dans un long fichier, je voudrais rechercher un modèle qui correspondra à environ 200 lignes. Les lignes correspondantes se trouvent à des emplacements aléatoires dans le fichier.
Lorsqu'une ligne correspond, seule la ligne elle-même est pertinente, pas de contexte au-dessus ou en dessous.
Normalement, je cherchais /
et sautais les matchs avec n
.
Mais cela signifie qu'il n'y a qu'une ou deux lignes pertinentes à l'écran à la fois.
Existe-t-il un moyen de masquer toutes les lignes qui ne correspondent pas, tout en parcourant la liste des lignes de résultat?
Une approche par force brute serait de supprimer toutes les lignes qui ne correspondent pas et d'annuler cette suppression plus tard. Mais c'est moche à bien des égards, même si cela ne finirait pas par une annulation persistante ...
:vimgrep
peut être abrégé en:vim
:ccl[ose]
ou comme vous le fermez normalement (par exemple, basculez dessus et:bd
). Vous pouvez rouvrir le tampon quickfix en exécutant à:cw[indow]
nouveau, et il utilisera vos derniers résultats vimgrep.Vous pouvez répertorier toutes les lignes correspondantes avec
(La
:print
commande peut être omise; c'est la valeur par défaut pour:g
.)la source
g/REgexp/p
) ... Le problème est que vous ne pouvez pas facilement accéder à l'un des matchs, cependant ...g
. Je suppose que c'est un modèle global. Je fais habituellement une recherche VI avec une barre oblique/pattern
et cela trouverait toutes les occurrences. On peut y accéder en appuyant sur la lettren
:g[lobal]
qui prend un modèle comme argument. Vous trouverez tous les détails sur:help :global
.Vous pouvez utiliser les options
foldmethod
etfoldexpr
pour replier les lignes non pertinentes.Après la recherche, la dernière recherche est enregistrée dans le
@/
registre. Ainsi, vous pouvez facilement replier tout ce qui ne correspond pas comme ceci (pour les correspondances sur une seule ligne):Des méthodes plus avancées, comme l'ajout de plusieurs niveaux de pliage pour les lignes de contexte que vous pouvez afficher ou masquer, ou la mise en correspondance de plusieurs lignes, peuvent être trouvées sur le wiki Vim Tips .
la source
set foldlevel=0
besoin? Mais c'est peut-être par défaut.:tab sp
par obtenir une nouvelle vue jetable sur le fichier. Revenir en arrière est aussi simple que:close
n'importe quelle autre façon de tuer l'onglet.Si l'ordre n'a pas d'importance, déplacez simplement les lignes.
Pour plus d'aide, voir:
la source
:g/pat/m$
(déplacer les lignes correspondantes à la fin) est également OK,[d] supprime toutes les lignes qui ne correspondent pas (!) aux motifs:
ou encore plus simple (merci pour les commentaires de 'B Layer'):
la source
:v
plutôt que:g!
. (Je ne me souviens pas de la dernière fois où j'ai vu ce dernier utilisé, TBH!)Si vous souhaitez répertorier toutes les lignes correspondantes (comme dans mon autre réponse), puis passer à une correspondance particulière, mon plug-in FindOccurrence fournit un
[/
mappage pour cela (et[n
pour le dernier modèle de recherche, au lieu d'en demander une).[/pattern
liste comme:g/pattern
, mais demande ensuite le numéro du match auquel aller.la source
Une autre façon consiste à utiliser
:h :ilist
, je l'utilise pour obtenir un aperçu de la page de manuel. son résultat ressemble à ceci:Voici une petite fonction qui vous permet de choisir d'aller à la ligne de résultat par index:
Il peut être utilisé comme ceci:
la source