Usar vim para forzar la escritura de un archivo que ha sido modificado en el sistema de archivos

Usar vim para forzar la escritura de un archivo que ha sido modificado en el sistema de archivos

Después de realizar un cambio de base interactivo con git, frecuentemente encuentro que un archivo que tengo abierto en vim ha sido modificado en el sistema de archivos. Cuando voy a escribir el archivo con :wo :w!, aparece el mensaje WARNING: The file has been changed since reading it!!!/ Do you really want to write to it (y/n)?.

Considero que esta advertencia es bastante razonable; Sería un comportamiento cuestionable sobrescribir silenciosamente un archivo en el sistema de archivos que haya cambiado por un motivo arbitrario. Sin embargo, en casos como este, en los que sé por qué se tocó el archivo, a menudo encuentro que quiero forzar la escritura en lugar de tener que verificar si hay un mensaje o no. He tenido situaciones en las que no he notado el mensaje e inmediatamente he tabulado, lo que ha resultado en compilaciones inconsistentes y, ocasionalmente, pérdida de datos.

¿Cómo me deshago del mensaje de confirmación, ya sea de forma permanente o (preferiblemente) con un comando ampliado análogo a w!?

Cuando busco esto en Google, obtengo un montón de resultados por forzar la escritura de un archivo de solo lectura con w!, pero parece que no puedo encontrar nada relacionado con la fuerza de escritura de un archivo modificado.

Respuesta1

El siguiente comando funciona para el búfer actual (no conozco una solución para varios búfer):

:w !sudo tee %

El carácter %representa el nombre del archivo actual. El sudocomando permite sobrescribir archivos abiertos como de sólo lectura.

Para definir :w!!un comando que haga lo anterior, agregue esto a .vimrc:

cmap w!! w !sudo tee > /dev/null %

La > /dev/nullpieza elimina la salida estándar teeque no se utiliza aquí.

Para más información ver la publicación. ¿Cómo funciona el truco vim "escribir con sudo"?

información relacionada