¿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?

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

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>

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.