Como o tail -f mostra a saída colorida com o vim?

9

Nesta pergunta , Gilles respondeu

Outra possibilidade é executar tail -fum buffer de shell do Emacs e usar as habilidades de coloração de sintaxe do Emacs.

Por ser um usuário do vim, eu gostaria de fazer isso com o vim , não com o emacs .
O vim tem esse recurso?

Benjamin
fonte
2
O Vim é apenas um editor de texto, diferente do Emacs ... No entanto, existe um plug-in para o Vim que pode ser útil.
jasonwryan
Há também o plug-in vimpager que pode fazer o truque
BSD
11
precisa ser um editor de texto? Se você só precisa colorir o texto, pode usar
Clide
Além disso, existe o TailBundle for vim.
Jofel
Há uma pergunta semelhante aqui . As soluções explicam o uso do multitail e como configurá-lo, talvez ele possa ser útil.
logoff

Respostas:

2

Você pode escrever um plug-in multithread para alterar os buffers em tempo real no Python ou em qualquer outro script que o Vim suporte e tenha threads.

Mas isso só funciona no terminal, tanto quanto eu sei. Pelo menos no X11, a versão da GUI falhará se a GUI for modificada por outro encadeamento.

Se você aceitar outros programas, grc e ccze poderão colorir fluxos.

lilydjwg
fonte
0

Eu gosto curto e sem muitos hackers ou scripts externos. Você pode executar este oneliner a partir de ex (dentro do vim) quando necessário (ou colocar cada comando no vimrc, para quando os arquivos de log forem abertos.)

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

e, além disso, você pode :set syntax=logtalkcolorir o log

(se você quiser pular (quase) para o final do arquivo, use "G" em vez de "lh" com as teclas de feed)

Explicação:

  • autoread: lê o arquivo quando alterado do lado de fora (mas não funciona por si só, não há cronômetro interno ou algo assim. Ele só lerá o arquivo quando o vim executar uma ação, como um comando em ex :!
  • CursorHold * checktime: quando o cursor não é movido pelo usuário pelo tempo especificado em updatetime(que é de 4000 milissegundos por padrão) checktimeé executado, que verifica alterações fora do arquivo
  • call feedkeys("lh"): o cursor é movido uma vez, direita e volta à esquerda. e então nada acontece (... o que significa que CursorHoldé acionado, o que significa que temos um loop )

Para parar a rolagem ao usar call feedkeys("G"), execute :set noautoread- agora o vim dirá que o arquivo foi alterado e pergunta se alguém deseja ler as alterações)

Eu gosto da idéia de assistir arquivos de log no vim (em vez de tail -f), por exemplo, quando você está trabalhando em uma sessão ssh sem screen / tmux. Além disso, você pode copiar diretamente do arquivo de log, se necessário, ou salvar a saída diretamente ou ... o que você puder fazer com o vim :)

* desta resposta (referindo-se a uma resposta de PhanHaiQuang e um comentário de flukus )

eli
fonte