Muy a menudo estoy trabajando con archivos que están controlados por versiones, por lo que es posible que se realicen cambios fuera de Vim.
¿Cuál es una forma rápida de volver a cargar el archivo sin tener que cerrar y volver a abrir Vim? ¿Y hay alguna manera de hacer esto automáticamente?
file-operations
load
Kevin Brown
fuente
fuente
" Compare buffer with saved version
nnoremap gd :DiffSaved<CR>
:h vim-faq
y buscar/reload
. La etiqueta difícil de memorizar es:h faq-5.8
.Respuestas:
El comando que desea es
:e
(abreviatura de:edit
). Si lo usa:edit!
, descartará los cambios locales y se volverá a cargar.También puede hacer que vim haga esto automáticamente
set autoread
en su vimrc.fuente
autoread
.:bufdo :e
o:bufdo :e!
:
es opcional::bufdo e
funcionará igual.En muchos casos,
set autoread
no funcionará, ya que esta respuesta explica:Los eventos de enfoque se dispararán
autoread
, pero estos no se capturan a menos que se usengvim
. Entonces, si se ejecuta sin problemasvim
dentro de una ventana de terminal o tmux, instale el complemento vim-tmux-focus-events .En las versiones tmux> 1.9, deberá agregar
.tmux.conf
:Para una bondad adicional, agregar lo siguiente a su
vimrc
disparador se activaráautoread
al cambiar los búferes dentro de vim:fuente
Si alguna vez ha ejecutado un comando externo desde Vim que modifica el búfer actual, es posible que haya notado que le solicita que vuelva a cargar el archivo ya que se han realizado cambios en el disco. En realidad, puede invocar este aviso utilizando el
:checktime
comando.fuente
Bonito complemento para mejorar
autoread
https://github.com/djoshea/vim-autoreadfuente
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.
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.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'sfor
/while
, o usando un hacky one-liner en Linux / Unix: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:
fuente