vim: nasconde le prime n lettere di tutte le righe in un file


12

Sto analizzando il file di registro usando vim e il formato è simile al seguente

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

Dal momento che la maggior parte delle volte non mi interessa data e ora. Voglio nasconderli e concentrarmi solo sulle colonne Nome e LogText (per salvare alcune proprietà dello schermo). Poiché le prime tre colonne occupano sempre le prime 35 lettere in una riga. C'è un modo per fare in modo che vim non mostri le prime 35 lettere di ogni riga?


Non so come lo fai in vim, ma se non ti dispiace creare un file temporaneo, potresti eseguire cut -c36- logfile > logfile_with_first_35_chars_missinge quindi rivederlo.
Warwick,

Risposte:


7

Hai chiesto come nascondere le prime lettere, non rimuoverle o farle scorrere lontano dalla vista - quindi ecco come nasconderle effettivamente:

Nascondi il testo in vim usando nascondi

È possibile utilizzare la corrispondenza , combinata con l' evidenziazione della sintassi e la funzione nascondi per non mostrare effettivamente i caratteri corrispondenti all'interno delle linee.

Per nascondere i primi 25 caratteri di ogni riga:

:syn match Concealed '^.\{25\}' conceal
:set conceallevel=2

Per nascondere invece solo le righe con la punteggiatura di una data:

:syn match Concealed '^....-..-.. ..:..:..\..... ' conceal

Per scoprire:

:syn clear Concealed
:set conceallevel=0

Come si presenta normalmente:

YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText
YYYY-MM-DD HH:MM:SS.USEC PID Name LogText

apparirà così dopo aver eseguito i primi due comandi:

PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText
PID Name LogText


Vedi anche - dentro vim:
help :syn-match
help :syn-conceal
help 'conceallevel'
help 'concealcursor'


(Fammi sapere se non si comporta in questo modo - potrebbero esserci altre impostazioni di cui non sono a conoscenza o così - Farò funzionare.)


1
Funziona bene, penso che vim debba essere compilato con l' +concealopzione (la mia è) per farlo funzionare. Buono anche da fare set concealcursor=ncper impedire l'espansione della linea del cursore.
user881300

Sì, l' +concealopzione caratteristica è standard come alcuni anni. Triste che ormai non è più noto. È davvero eccezionale e flessibile. Offre molte nuove opzioni ...
Volker Siegel,

8

Usa la funzionalità filtro di vim . Correre:

:%!cut -b36-

per eseguire il contenuto del buffer tramite il cutcomando, mantenendo solo i byte 36 e successivi. %significa eseguire l'intero buffer e sostituirne il contenuto con l'output, quindi !è il comando filter, con il resto della riga come programma da eseguire. Ciò non modifica il file sottostante a meno che non si salvi il buffer in alto.

Per recuperare il buffer non tagliato originale è possibile utilizzare :e, a condizione che sia supportato da un file reale.


E poi usare %!cat %per riaverlo? Funziona benissimo e posso usare a mapper alternare tra questi due
user881300

Sì, funzionerà, a condizione che tu abbia un vero file di backup del buffer.
Michael Homer,

3
@Michael Homer: ora funzionerà con i caratteri Unicode.
cuonglm,

6

Penso che più in linea con ciò che stai cercando sia lo scorrimento orizzontale .

Z è il tasto di comando a scorrimento orizzontale, seguito da una direzione per spostarsi con il tasto freccia sinistra o destra.

Per prima cosa :set nowrapdisabilita il ritorno a capo. Poi stampa z, 35, per scorrere 35 posti.


Questo è molto utile durante la lettura dei registri, grazie!
Fabio F.

ok, ottimo per una singola pagina, ma ... Come fare pagina giù o pagina su senza che il cursore salti di nuovo all'inizio della riga?
elysch

ho appena trovato come farlo nella risposta @ user2987828: usando:set nosol
elysch il

Posiziona il cursore sull'ultimo carattere che vuoi nascondere. Quindi digitare ...[Esc] z s
roblogic,

2

In modalità comando, prova:

:%s/^.\{35}//
  • %s/pat/sub/: sostituisci ogni ricorrenza di pat con sub
  • ^.\{35}: abbina i primi 35 caratteri della linea

Questo comando rimuove i primi 35 caratteri di ogni riga. Puoi leggere :h regular-expressionper maggiori dettagli sull'espressione regolare in vim.


1

Esiste una soluzione facile da ricordare, senza modificare buffer o file. Posiziona il cursore sul primo carattere ( Lsul tuo esempio) della porzione di file che vuoi vedere, quindi digita

:set nowrap
zs

Il zscomando imposterà vi in ​​modo che il carattere con il cursore appaia nella prima colonna dello schermo. Assicurati di non aver digitato i :set nosoltuoi file di configurazione.

Il g$comando sposta il cursore sull'ultima colonna visibile.

Il g0comando riporterà il cursore sulla prima colonna visibile, quella contenente L.

Se un tasto qualsiasi sposta il cursore a sinistra o a destra fuori dalle colonne visibili, le finestre visibili si sposteranno.


E il g0comando sposterà il cursore sulla prima colonna visibile
elysch
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.