Mi pregunta es similar a cómo monitorear un archivo de texto en tiempo real,
pero quiero hacerlo en vim. Sé que puedo leer un archivo de uso de tail -f sample.xml
archivo abierto , y cuando se escribe contenido nuevo en el archivo, también escribirá el contenido nuevo en mi pantalla. ¿Puedo hacer que vim complete automáticamente los nuevos datos cuando se actualiza un archivo?
104
autoread
funciona y sus limitaciones.No sé automáticamente, pero puede escribir:
para recargar el archivo
fuente
Pon lo siguiente en tu
.vimrc
:fuente
como dijo @flukus en un comentario a una respuesta anterior , puede
call feedkeys["lh"]
(mueve el cursor hacia la derecha y hacia la izquierda, lo que normalmente no hace daño al ver un archivo de registro)Entonces, si combina el resto de la respuesta , tiene un delineador único que puede ejecutar desde ex (dentro de vim) cuando sea necesario:
:set autoread | au CursorHold * checktime | call feedkeys("lh")
(si desea saltar (casi) al final del archivo, simplemente use "G" en lugar de "lh" con las teclas de alimentación)
Explicación:
- lectura automática : lee el archivo cuando se cambia desde el exterior (pero no funciona por sí solo, no hay un temporizador interno o algo así. Solo leerá el archivo cuando vim haga una acción, como un comando en ex
:!
- CursorHold * checktime : cuando el usuario no mueve el cursor durante el tiempo especificado en 'updatetime' (que es 4000 milisegundos por defecto) se ejecuta checktime, que busca cambios desde fuera del archivo
- llame a feedkeys ("lh") : el cursor se mueve una vez, a la derecha y atrás a la izquierda. y luego no pasa nada (... lo que significa que CursorHold se activa, lo que significa que tenemos un bucle )
Además puedes
:set syntax=logtalk
colorear el troncoPara detener el desplazamiento cuando se usa
call feedkeys("G")
, ejecute:set noautoread
; ahora vim le dirá que el archivo fue cambiado y preguntará si uno quiere leer los cambios o no)(¿Tiene esto algún efecto secundario?)
Editar: Veo un efecto secundario: si uno usa "G" es la tecla de alimentación, ¿se desplazará hacia abajo en cada búfer abierto actualmente? Por lo tanto, no es posible trabajar en el búfer izquierdo de una ventana de splittet mientras que el búfer derecho se desplaza hacia abajo en un archivo de registro automáticamente
fuente
Pegue esto en su .vimrc y debería funcionar como un jefe. (Tomado de: http://vim.wikia.com/wiki/Have_Vim_check_automatically_if_the_file_has_changed_externally )
fuente
CursorHold
se ejecuta una vez . Entonces, si te vas y tomas un café, o estás haciendo algo en otra ventana, no se actualizará.Tail Bundle debería hacer lo que quieras. Tenga en cuenta que no lo he usado yo mismo.
fuente
Si unix + neovim
:term tail -f <filename>
Obviamente, esto no funcionará para todos, pero así es como lo hago.
fuente
También hay un complemento:
https://github.com/djoshea/vim-autoread
Esta era la única forma en que podía hacer que esto funcionara en OSX.
fuente
VIM le advertirá cuando un archivo se haya actualizado para que no sobrescriba los cambios que se han realizado desde que lo abrió. En ese momento, le indicará que vuelva a cargar el archivo.
fuente