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

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

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

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

16
задан sligocki 9 July 2010 в 19:22
поделиться

4 ответа

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

(defun save-buffer-always ()
  "Save the buffer even if it is not modified."
  (interactive)
  (set-buffer-modified-p t)
  (save-buffer))
18
ответ дан 30 November 2019 в 16:18
поделиться

В качестве небольшой альтернативы ответу Скоттфразера:

(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, конечно.

0
ответ дан 30 November 2019 в 16:18
поделиться

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

15
ответ дан 30 November 2019 в 16:18
поделиться

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

C-u M-~

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

(defadvice save-buffer (before save-buffer-always activate)
  "always save buffer"
  (set-buffer-modified-p t))
8
ответ дан 30 November 2019 в 16:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: