Как заставить Emacs экономить, даже если он думает (никаких изменений не нужно сохранять)

Это происходит со мной все время:

  • У меня есть файл, открытый в emacs,
  • Я сохраняю его ('save-buffer),
  • файл изменяется на диске (или удаляется, перемещается и т.д.).
  • но я хочу, чтобы он вернулся, поэтому я пытаюсь сохранить снова в emacs ( "save-buffer" ), а вместо сохранения он говорит "(никаких изменений не нужно сохранять" ) и ничего не делает.

Есть ли другая функция или параметр, которые я могу использовать для принудительного сохранения emacs?

Ответы

Ответ 1

Оберните функцию вокруг буфера сохранения, которая сначала отметит сначала измененный буфер:

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

Ответ 2

Вы можете сохранить как с C-x C-w. Это должно экономить безоговорочно. Вы также можете просто ввести пробел, а затем перекрыть его. Emacs достаточно умен, чтобы понять, что если вы отмените все, что вы сделали до сих пор, буфер не имеет никаких изменений, но если вы внесете изменения, а затем вручную отмените их, он рассмотрит, что буфер был изменен.

Ответ 3

Вы можете пометить текущий буфер как измененный с помощью функции Emacs- Lisp немодифицированной с префиксом arg, связанным с:

C-u M-~

Ответ выше не будет работать, если вы не вызываете новую функцию напрямую. Если вы хотите беспрепятственно изменять поведение сохранения emacs. Лучшим решением является создание совета:

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

Ответ 4

В качестве легкой альтернативы ответу на 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))

Это вы могли бы заставить его, когда хотите с префиксом (C-u C-x C-s), но в противном случае без необходимости изменять файл. Последняя измененная временная метка очень полезна (например, управление исходным кодом), что кажется позором изменить ее произвольно. YMMV, конечно.

Ответ 5

Аналогичная проблема привела меня к онлайн-поиску решения. Затем мне кажется, что все, что мне нужно сделать, это ввести пробел (или любой символ) и удалить его, что помечает буфер как измененный. Тогда я могу набрать C-x C-s как обычно. Может быть, не сложный или продвинутый, но он работает.