Come fare in modo che tail -f mostri un output colorato con vim?


9

In questa domanda , rispose Gilles

Un'altra possibilità è quella di eseguire tail -fun buffer di shell Emacs e utilizzare le abilità di colorazione della sintassi di Emacs.

Poiché sono un utente di VIM, mi piacerebbe farlo con VIM , non con Emacs .
Fa vim hanno questa caratteristica?


2
Vim è solo un editor di testo, a differenza di Emacs ... Tuttavia, esiste un plug-in di coda per Vim che può essere utile.
Jasonwryan,

C'è anche il plug-in vimpager che potrebbe fare il trucco
bsd

1
deve essere un editor di testo? Se hai solo bisogno di colorare il testo, puoi usare Clide
golimar il

Inoltre, c'è TailBundle per vim.
jofel

C'è una domanda simile qui . Le soluzioni spiegano l'uso del multitail e come configurarlo, forse può essere utile.
disconnessione il

Risposte:


2

Puoi scrivere un plug-in multithread per modificare i buffer in tempo reale in Python o in qualsiasi altro script supportato da Vim e con thread.

Ma questo funziona solo in terminale, per quanto ne so. Almeno in X11, la versione della GUI si arresta in modo anomalo se la GUI viene modificata da un altro thread.

Se si accettano altri programmi, grc e ccze sono in grado di colorare i flussi.


0

Mi piace breve e senza molti hacking o script esterni. Puoi eseguire questo oneliner da ex (con vim) quando necessario (o mettere ogni comando in vimrc, per quando vengono aperti i file di registro).

:set autoread | au CursorHold * checktime | call feedkeys("lh")

e inoltre è possibile :set syntax=logtalkcolorare il registro

(se vuoi saltare (quasi) alla fine del file, usa "G" invece di "lh" con i feedkeys)

Spiegazione:

  • autoread: legge il file quando viene modificato dall'esterno (ma non funziona da solo, non esiste un timer interno o qualcosa del genere. Leggerà il file solo quando vim esegue un'azione, come un comando in ex :!
  • CursorHold * checktime: quando il cursore non viene spostato dall'utente per il tempo specificato in updatetime(che è di default 4000 millisecondi) checktimeviene eseguito, che controlla le modifiche dall'esterno del file
  • call feedkeys("lh"): il cursore viene spostato una volta, a destra e indietro a sinistra. e poi non succede nulla (... il che significa che CursorHoldviene attivato, il che significa che abbiamo un loop )

Per interrompere lo scorrimento durante l'utilizzo call feedkeys("G"), esegui :set noautoread- ora vim dirà, che il file è stato modificato e chiedi se si desidera leggere le modifiche o meno)

Mi piace l'idea di guardare i file di log in vim (anziché tail -f), ad esempio quando lavori in una sessione ssh senza schermo / tmux. Inoltre, puoi copiare direttamente dal file di registro, se necessario, o salvare l'output direttamente o ... qualunque cosa tu possa fare con vim :)

* da questa risposta (riferendosi a una risposta di PhanHaiQuang e un commento di flukus )

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.