Tuve el problema de mirar el contenido de un archivo, actualizar el archivo externamente, mostrar el archivo modificado y tener la opción de editarlo cuando sea necesario. Lo resolví con el servidor Vim / opciones de línea de comando remoto, inspirado en esta respuesta .
Con los siguientes comandos, un archivo puede recargarse mediante un comando externo. Primero, abra el archivo en cuestión con Vim, mientras inicia una instancia del servidor.
vim --servername JABBERWOCKY /tmp/alice.log
Supongamos que el archivo se ha cambiado externamente, por ejemplo, a echo "Curiouser and curiouser" >> /tmp/alice.log
. Cuando sea necesario, envíe un comando a la instancia del servidor para volver a cargar el archivo. Este comando finalizará rápidamente y no generará un nuevo editor.
vim --servername JABBERWOCKY --remote-send ":e<CR>"
Si el archivo abierto se cambió en Vim y externamente, habrá un conflicto durante la recarga (aparecerá un mensaje de advertencia). Para ese caso, se debe tomar una decisión: dejarlo así y mantener los cambios en Vim, o descartar los cambios locales y forzar una recarga .
El comando --remote-send
anterior requiere la recarga manual. Sin embargo, ese comando podría estar vinculado a un bucle simple, usando Bash's for
/ while
, o usando un hacky one-liner en Linux / Unix:
watch -n 1 'vim --servername JABBERWOCKY --remote-send ":e<CR>"'
Aunque no se ha probado, estoy seguro de que algo así también podría realizarse en PowerShell.
En Linux / Unix, se puede realizar un enfoque basado en eventos al escuchar eventos del sistema de archivos utilizando, por ejemplo, la biblioteca inotify , si no está utilizando sistemas de archivos demasiado locos. Personalmente, me gusta mucho usar la herramienta entr , que parece estar incluida en las principales distribuciones de Linux. Entonces me sale:
echo /tmp/alice.log | entr vim --servername JABBERWOCKY --remote-send ":e<CR>"
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>