emacs save

Cómo obligar a Emacs a guardar incluso si piensa(no es necesario guardar ningún cambio)



save (5)

Esto me pasa todo el tiempo:

  • Tengo un archivo abierto en emacs,
  • Lo guardo (''save-buffer),
  • el archivo cambia en el disco (o se borra, se mueve, etc.)
  • pero lo quiero de vuelta, así que intento guardar de nuevo en emacs (''save-buffer) y en lugar de guardarlo dice "(no es necesario guardar los cambios)" y no hace nada.

¿Hay alguna función o configuración diferente que pueda usar para forzar a Emacs a guardar?


Como una ligera alternativa a la respuesta del scottfrazer:

(defun my-save-buffer-always-sometimes (prefix) "Save the buffer even if it is not modified." (interactive "P") (when prefix (set-buffer-modified-p t)) (save-buffer))

Esto es, puede forzarlo cuando lo desee con un prefijo ( Cu Cx Cs ) pero no cambiar innecesariamente un archivo de lo contrario. La última marca de tiempo modificada es muy útil (por ejemplo, el control de código fuente) que parece una pena cambiarlo arbitrariamente. YMMV, por supuesto.


Envuelve una función alrededor de save-buffer que marca el buffer modificado primero:

(defun save-buffer-always () "Save the buffer even if it is not modified." (interactive) (set-buffer-modified-p t) (save-buffer))


Puede marcar el búfer actual como modificado utilizando la función Emacs-Lisp no modificada con un prefijo arg, enlazado a:

C-u M-~

La respuesta anterior no funcionará si no llama directamente a la nueva función. Si desea cambiar a la perfección el comportamiento de guardado de emacs. La mejor solución es crear un consejo:

(defadvice save-buffer (before save-buffer-always activate) "always save buffer" (set-buffer-modified-p t))


Puedes guardar como, con Cx Cw. Eso debería ahorrar incondicionalmente. También puede simplemente escribir un espacio y luego retroceder sobre él. Emacs es lo suficientemente inteligente como para darse cuenta de que si deshace todo lo que ha hecho hasta ahora, el búfer no tiene cambios, pero si realiza cambios y luego los invierte manualmente, considerará que el búfer se ha cambiado.


Un problema similar me puso en línea para buscar una solución. Entonces me parece que todo lo que tengo que hacer es escribir un espacio (o cualquier carácter) y eliminarlo, lo que marca el búfer como modificado. Entonces puedo escribir Cx Cs como normal. Tal vez no sea sofisticado o avanzado, pero funciona.