Gostaria de saber se existe uma maneira de fazer com que o Vim se comporte tail -f
.
Até o melhor plugin Vim que encontrei até agora não faz o que eu esperava.
Eu realmente quero ver a atualização do arquivo em tempo real . Mesmo longe do teclado, quero que o Vim recarregue constantemente o buffer e pule para a última linha.
Como fazer isso?
(Não quero recarregar o arquivo inteiro, pois alguns arquivos de log são muito grandes. O melhor é carregar apenas as últimas linhas, como tail -f
faz.)
vim
? O que há de erradotail -f
?less +F
vez detail -f
. Porém, não fornece a sintaxe destacada.Respostas:
Você não pode fazer
vim
como se comportartail -f
. Você pode seless
comportar como uma combinação devim
e notail -f
entanto.Avançar para sempre (seguir)
less
possui um modo encaminhar para sempre que você pode acessar pressionando Fou passando+F
como argumento.Nesse modo,
less
comporta-se comotail -f
se não parasse de ler quando chegasse ao final de um arquivo. Ele atualiza constantemente com novos dados do arquivo. Para sair deste modo, pressione Ctrlc.Realce de sintaxe
less
suporta filtragem automática dos dados que lê. Existe um programa chamado source-realce que pode executar o destaque básico do código-fonte. Ele vem com um script que funciona bem comless
. Para usá-lo, basta definir aLESSOPEN
variável ambiental adequadamente.Você também precisa informar
less
para passar as seqüências de escape brutas do terminal (elas informam ao terminal como colorir o texto) passando a-R
bandeira. Você pode dizerless
para fingir que está sempre passando a-R
bandeira definindo aLESS
variável ambiental.Quando
less
não é suficienteEmbora
less
tenha atalhos de teclado parecidos com vi, não é o mesmo que Vim. Às vezes, parece estranho e carece de recursos importantes, como a integração de ctags e a capacidade de editar texto.Você pode fazer a
less
chamada Vim (supondoEDITOR=vim
) no arquivo que está visualizando atualmente pressionando v.less
até colocará o cursor no local correto no Vim. Ao sair do Vim, você voltará aless
. Se você fez alguma alteração no arquivo enquanto estava no Vim, elas serão refletidasless
.fonte
Agora, em outro shell (como o bash), você pode:
Onde o <C -> <CN> força o vim a entrar no modo normal, "edite!" diz ao vim para recarregar o arquivo atual (o CR simula pressionando enter) e G vai para a parte inferior do arquivo. A remoção de (G) facilita a inseptação do arquivo enquanto a entrada é recebida.
fonte
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Feb 10 2013 02:28:47) Option inconnue: "--servername=toto" Plus d'info avec: "vim -h"
Encontrei a resposta graças ao comentário de Evan Teitelman . Minha solução é inspirada em /usr/share/vim/vimcurrent/macros/less.vim .
Eu fiz minha própria função, mas poderia ser melhorada muito.
E apenas pressione CTRL + C para sair do Tailf.
Para abrir um arquivo de log no modo Tailf:
view -M "+call Tailf()" /path/to/logfile.log
O que não gosto é a
sleep
chamada, que não permite fazer nada no vim durante a atualização automática. O melhor seria se o buffer fosse autônomo e fosse atualizado mesmo se eu estivesse em outra janela dividida. Enfim, é um bom começo. :)fonte
:read
isso espera até que um arquivo seja modificado e, se tiver sido anexado, lê as linhas na parte inferior do arquivo.Um método não recursivo para o mesmo:
fonte
Eu gosto curto e sem muita invasão. 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.)
(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 emupdatetime
(que é de 4000 milissegundos por padrão)checktime
é executado, que verifica alterações fora do arquivocall feedkeys("lh")
: o cursor é movido uma vez, direita e volta à esquerda. e então nada acontece (... o que significa queCursorHold
é 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 a um comentário de flukus )
fonte
Edit: Peço desculpas, completamente ignorado que você já tentou isso.
Você pode tentar usar o plugin Tail Bundle , acho que ele deve fazer o que você está procurando.
Para instalar, abra o tail-3.0.vba com o vim e execute:
Reinicie e você deve conseguir inicializar um arquivo no vim da seguinte forma:
fonte
SOMENTE No VIM 8.0+, eles introduziram temporizadores, para que você pudesse usar um temporizador para simular a função de cauda, isso funciona de maneira bastante eficaz na minha experiência.
Mapeei a tecla F6 para ativar a cauda e F7 para desativar a cauda; você pode personalizá-los nos comandos abaixo; também veja minha seção abaixo para PALAVRAS DE CUIDADO.
Execute o seguinte
Você também pode fazer com que os comandos acima façam parte do vimrc, para sempre tê-los.
Algumas palavras de cautela:
fonte
No Vim, execute:
Isso suspenderá o Vim enquanto o filho bifurcado é executado
tail -f
no buffer atual. Pressionando Ctrl-Cretorna você de volta ao buffer no Vim.fonte
tail
fazendo o trabalho. O Vim é portátil. Isso não é.