Me gustaría saber si hay una manera de hacer que Vim se comporte como tail -f
.
Incluso el mejor complemento de Vim que he encontrado hasta ahora no hace lo que esperaba.
Realmente quiero ver la actualización del archivo en tiempo real . Incluso si estoy lejos del teclado, quiero que Vim vuelva a cargar constantemente el búfer y salte a la última línea.
¿Como hacer esto?
(No quiero volver a cargar todo el archivo, ya que algunos archivos de registro son muy grandes. Lo mejor es cargar solo las últimas líneas, como lo tail -f
hace).
vim
? ¿Qué tiene de malotail -f
?less +F
lugar detail -f
. Sin embargo, no te da el resaltado de sintaxis.Respuestas:
No puedes hacer que se
vim
comporte comotail -f
. Puede hacer que seless
comporte como una combinación devim
ytail -f
sin embargo.Modo de reenviar para siempre (seguir)
less
tiene un modo de reenvío para siempre al que puede ingresar presionando Fo pasando+F
a él como argumento.En este modo, se
less
comporta comotail -f
si no dejara de leer cuando llega al final de un archivo. Se actualiza constantemente con nuevos datos del archivo. Para salir de este modo, presione Ctrlc.Resaltado de sintaxis
less
admite el filtrado automático de los datos que lee. Hay un programa llamado source-highlighting que puede realizar resaltado básico del código fuente. Viene con un script que funciona bien conless
. Para usarlo, simplemente configure laLESSOPEN
variable ambiental de manera adecuada.También debe indicarle
less
que pase secuencias de escape de terminal sin procesar (estas le indican a su terminal cómo colorear el texto) pasándole la-R
bandera. Puedes decirless
que finges que siempre se pasa la-R
bandera configurando laLESS
variable ambiental.Cuando
less
no es suficienteAunque
less
tiene combinaciones de teclas tipo vi, simplemente no es lo mismo que Vim. A veces se siente extraño y carece de características importantes, como la integración de ctags y la capacidad de editar texto.Puede hacer una
less
llamada a Vim (suponiendoEDITOR=vim
) en el archivo que está viendo actualmente presionando v.less
incluso colocará el cursor en la ubicación correcta dentro de Vim. Cuando salgas de Vim, te encontrarás nuevamente enless
. Si realizó algún cambio en el archivo mientras estaba en Vim, se reflejará en élless
.fuente
Ahora, en otro shell (como bash), puedes hacer:
Donde <C -> <CN> obliga a vim a pasar al modo normal, "¡editar!" le dice a vim que vuelva a cargar el archivo actual (el CR simula presionar enter), y G va al final del archivo. Al eliminar (G), es más fácil insertar el archivo mientras ingresa la entrada.
fuente
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"
Encontré la respuesta gracias al comentario de Evan Teitelman . Mi solución está inspirada en /usr/share/vim/vimcurrent/macros/less.vim .
Hice mi propia función, pero podría mejorarse mucho.
Y simplemente presione CTRL + C para salir de Tailf.
Para abrir un archivo de registro en modo Tailf:
view -M "+call Tailf()" /path/to/logfile.log
Lo que no me gusta es la
sleep
llamada, que no permite hacer nada en vim durante la actualización automática. Lo mejor sería si el búfer es autónomo y se actualiza incluso si estoy en otra ventana dividida. De todos modos, es un buen comienzo. :)fuente
:read
que espere hasta que se haya modificado un archivo y, si se ha agregado, se lee en las líneas en la parte inferior del archivo.Un método no recursivo para lo mismo:
fuente
Me gusta breve y sin mucho hackeo. Puede ejecutar este oneliner desde ex (dentro de vim) cuando sea necesario (o poner cada comando en vimrc, para cuando se abren los archivos de registro).
(si desea saltar (casi) al final del archivo, simplemente use "G" en lugar de "lh" con las teclas de alimentación)
Explicación:
autoread
: lee el archivo cuando se cambia desde el exterior (pero no funciona solo, no hay temporizador interno o algo así. Solo leerá el archivo cuando vim realice una acción, como un comando en ex:!
CursorHold * checktime
: cuando el cursor no es movido por el usuario durante el tiempo especificadoupdatetime
(que es 4000 milisegundos por defecto)checktime
se ejecuta, que verifica los cambios desde fuera del archivocall feedkeys("lh")
: el cursor se mueve una vez, hacia la derecha y hacia la izquierda. y luego no pasa nada (... lo que significa queCursorHold
se dispara, lo que significa que tenemos un bucle )Para detener el desplazamiento al usar
call feedkeys("G")
, ejecute:set noautoread
: ahora vim le dirá que el archivo fue cambiado y le preguntará si desea leer los cambios o no)Me gusta la idea de ver archivos de registro en vim (en lugar de tail -f), por ejemplo, cuando está trabajando en una sesión ssh sin screen / tmux. Además, puede copiar directamente desde el archivo de registro, si es necesario, o guardar la salida directamente o ... lo que sea que pueda hacer con vim :)
* de esta respuesta (refiriéndose a una respuesta de PhanHaiQuang y un comentario de flukus )
fuente
Editar: Pido disculpas, omití por completo que ya hayas intentado esto.
Puede intentar usar el complemento Tail Bundle , creo que debería hacer lo que está buscando.
Para instalar, abra tail-3.0.vba con vim y ejecute:
Reinicie y debería poder seguir un archivo desde vim así:
fuente
SOLO para VIM 8.0+ introdujeron temporizadores, por lo que podría usar un temporizador para simular la función de cola, esto funciona bastante efectivamente en mi experiencia.
He asignado la tecla F6 para encender la cola y F7 para apagar la cola, puede personalizarlas en los comandos a continuación, también vea mi sección a continuación para PALABRAS DE PRECAUCIÓN.
Ejecute lo siguiente
También puede hacer que los comandos anteriores formen parte de vimrc para que siempre los tenga.
Algunas palabras de precaución:
fuente
Desde Vim, ejecute:
Eso suspenderá a Vim mientras el niño bifurcado se ejecuta
tail -f
en el búfer actual. Golpear Ctrl-Cte devuelve al búfer en Vim.fuente
tail
hace el trabajo. Vim es portátil. Esto no es.