¿Cómo puedo recargar todas las memorias intermedias a la vez?

20

Cuando trabajo en una rama de características git, frecuentemente necesito esconder mis cambios para confirmar una corrección de errores en la rama principal. Cuando termine de trabajar en los cambios, I git stash pop, que actualiza las marcas de tiempo en los archivos.

Aunque los archivos son idénticos, la próxima vez que trate de guardar, obtengo:

ADVERTENCIA: ¡El archivo ha cambiado desde que lo leyó!

¿Realmente quieres escribirle (sí / no)?

No quiero volver a cargar automáticamente el archivo cada vez que cambia en el disco, solo cuando yo git stash pop.

En este momento, recargo manualmente cada búfer individualmente ( :e). ¿Hay alguna manera de que pueda hacer esto en un comando?

beatgammit
fuente

Respuestas:

26

Mira :help bufdolo que quieres hacer. Ejecutará un comando en cada búfer en la lista de búfer. Por ejemplo:

:bufdo e

También puede mirar :help noconfirmpara deshabilitar el diálogo de confirmación antes de emitir el bufdocomando

:set noconfirm

y volver a habilitarlo después de la bufdoorden.

:set confirm
Matthew S
fuente
1
A la fuerza, trate de: :bufdo! e.
kenorb
y sin imprimir mensajes en pantalla: ¡silencio! bufdo e
Werner
12

Puedes hacer esto con el :checktimecomando. De los documentos :

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

El comando le preguntará qué hacer para cada búfer cuyo archivo tiene una marca de tiempo modificada. Para deshabilitar esto para los archivos que no han cambiado, puede :set autoreadforzar a vim a que simplemente los vuelva a cargar. vim le preguntará si el contenido entre el búfer y el archivo en el disco ha cambiado.

Puede configurar un mapa como el siguiente para facilitar su uso:

nnoremap <F5> :checktime<CR>
tokoyami
fuente
Aquí hay información adicional que no es realmente parte de la respuesta: para mí, en OpenSUSE, gvim (la GUI de GTK para vim) hace esto automáticamente cuando se enfoca. Realmente no sé por qué lo hace y no he comprobado en otros sistemas, pero pensé que podría ser útil como extra. Tal vez alguien más puede confirmar?
tokoyami
¡Esto es realmente útil! Lo que hice por mi parte fue integrar este comando como parte de mis atajos de cambio de pestaña. es decirnnoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith
1
@tokoyami, la función que tiene gvimpuede estar relacionada con el FocusGainedevento en vim. Puede encontrar información relacionada aquí: unix.stackexchange.com/a/383044/99801 .
Victor Yarema