Nascondi tutte le righe (non) corrispondenti in Vim


87

È possibile mostrare / nascondere tutte le righe corrispondenti in vi o Vim? Non evidenziare ma mostrare solo quelle linee.

Ad esempio, ho un testo con la parola la parola ERROR. Come faccio a mostrare solo le righe che contengono ERRORe come mostrare solo le righe senza ERROR?

Esiste una soluzione senza eliminare tutte le righe corrispondenti e quindi annullarla?


Risposte:


109

Conosci il :globalcomando? Questo fa quello che vuoi?

:g/ERROR

e per il contrario:

:g!/Error

o equivalentemente:

:v/Error

19
Questo non è molto buono. Una volta che scorri fino in fondo, il comando termina e tutto viene visualizzato di nuovo. Non sta realmente nascondendo quei contenuti.
Kan Li

@KanLi ha colpito g<per vedere di nuovo, o @:se non hai eseguito e comandi.
D. Ben Knoble

53

Un altro approccio a seconda del tuo caso d'uso sarebbe usare vimgrep e i suoi risultati in quickfix . Puoi fare quanto segue:

:vimgrep pattern %cercherà il file corrente e ti porterà al primo risultato della ricerca. Ancora più importante, mette anche i risultati nella "lista di correzione rapida".

:copenaprirà quindi l'elenco di quickfix in una finestra quickfix separata. Quindi avrai una finestra separata con tutte le righe dal tuo ultimo vimgrep. All'interno della finestra quickfix puoi quindi premere Invio o fare doppio clic su una riga per passare alla riga corrispondente nel file originale.

:colderti consentirà di tornare agli elenchi di correzione rapida più vecchi (vecchi risultati di vimgrep). E :cnewerpassa ai risultati di ricerca più recenti.

Nota che l'elenco di correzione rapida viene aggiornato anche durante l'esecuzione :make(motivo per cui si chiama correzione rapida per correggere gli errori). Per questo motivo c'è anche un'alternativa all'elenco di quickfix chiamato "elenco di posizioni". Per usarlo, invece di utilizzare :lvimgrep, quindi utilizzare i comandi l-prefisso piuttosto che comandi c-prefisso - :lopen, :lolder, :lnewer.

Ovviamente c'è molto di più che puoi fare. Vedi :help quickfixper maggiori informazioni.

PS, hai detto che non volevi un approccio che elimina le righe e poi le annulla. Ma dato che hai segnato g/ERRORcome risposta ho pensato di farti notare che un modo veloce e sporco è quello di fare g!/ERROR/d. Puoi quindi annullarlo facilmente usando u. Inoltre, puoi fare :set hlsearchper evidenziare i modelli abbinati ai :gcomandi.


1
Grazie per il suggerimento su ": g! / ERROR / d" migliore della risposta accettata.
VinGarcia

Puoi farlo con linee che non corrispondono allo schema?
Jacktose


26

Il modo migliore per farlo è->

:vimgrep /something/g % | copen

Questo aprirà l'elenco delle corrispondenze per la tua parola chiave e mostrerà anche solo le linee corrispondenti nella finestra di correzione rapida.

Sostituisci% con il percorso del file se non si considera il file corrente.


1
Sostituisci% con il percorso del file se non stai considerando il file corrente.
Shivendra

Puoi farlo con linee che non corrispondono allo schema?
Jacktose

1

:vimgrep /something/g % | copenfunziona alla grande. :g/<pattern>/dPuò anche essere utilizzato per eliminare le linee con il motivo


Questa è esattamente un'altra risposta a questa domanda.
Shivendra

1

nel caso ti capiti di usare fzfpotresti usare:

  • :Lines in tutti i file aperti
  • :BLines solo in buffer aperto
  • :Rg [pattern] utilizzando ripgrep

1

Un modo sporco e hacker per farlo:

:w (save)
ggdG (deletes everything)
:.!grep something % (replace current line with grep output)

0

Probabilmente intendi comando in less vi vim & / pattern / che mostra le righe contenenti / pattern / (come grep).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.