Como fazer com que tail -f mostre a saída colorida com o vim?

Como fazer com que tail -f mostre a saída colorida com o vim?

Nissopergunta, Gilles respondeu

Outra possibilidade é correr tail -fem umEmacsbuffer de shell e usar as habilidades de coloração de sintaxe do Emacs.

Como sou um usuário do vim, gostaria de fazer isso comvim, nãoemacs.
Fazvimtem esse recurso?

Responder1

Você pode escrever um plugin multithread para alterar o(s) buffer(s) em tempo real em Python ou qualquer outro script que o Vim suporte e tenha threads.

Mas isso só funciona no terminal, até onde eu sei. Pelo menos no X11, a versão da GUI irá travar se a GUI for modificada por outro thread.

Se você aceitar outros programas,grcecczesão capazes de colorir fluxos.

Responder2

Gosto dele curto e sem muitos hacks ou scripts externos. Você pode executar este oneliner do 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, basta usar "G" em vez de "lh" com feedkeys)

Explicação:

  • autoread: lê o arquivo quando alterado externamente (mas não funciona sozinho, não há temporizador interno ou algo parecido. Ele só lerá o arquivo quando o vim executar uma ação, como um comando no ex:!
  • CursorHold * checktime: quando o cursor não é movido pelo usuário durante o tempo especificado em updatetime(que é 4.000 milissegundos por padrão), checktimeé executado, que verifica alterações de fora do arquivo
  • call feedkeys("lh"): o cursor é movido uma vez, para a direita e para trás à esquerda. e então nada acontece (... ou seja, isso CursorHoldé acionado, o que significa que temos umlaço)

Para interromper a rolagem ao usar call feedkeys("G"), execute :set noautoread- agora o vim dirá que o arquivo foi alterado e perguntará se deseja ler as alterações ou não)

Gosto da ideia de observar os 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 :)

*desteresponder(referindo-se a uma resposta dePhanHaiQuange um comentário deflukus)

informação relacionada