即使它认为(如果不需要保存更改),如何强制Emacs保存

时间:2010-07-09 19:22:27

标签: emacs save

这种情况一直发生在我身上:

  • 我在emacs中打开了一个文件,
  • 我保存它('保存缓冲区),
  • 磁盘上的文件更改(或删除,移动等)
  • 但我想要它,所以我尝试再次保存在emacs('save-buffer)中,而不是保存它说“(不需要保存更改)”并且什么都不做。

我可以使用不同的功能或设置强制emacs保存吗?

5 个答案:

答案 0 :(得分:18)

围绕保存缓冲区包装一个函数,该函数标记首先修改的缓冲区:

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

答案 1 :(得分:15)

您可以使用C-x C-w另存为。这应该无条件地保存。您也可以只键入一个空格,然后在其上退格。 Emacs很聪明地意识到,如果你撤消到目前为止所做的一切,缓冲区没有变化,但是如果你做了更改然后手动反转它们,它会认为缓冲区已被更改。

答案 2 :(得分:7)

您可以使用Emacs-Lisp函数未修改将当前缓冲区标记为已修改,前缀为arg,绑定到:

C-u M-~

如果您不直接调用新功能,上述答案将无效。 如果您想要无缝更改emacs保存行为。最好的解决方案是建立一个建议:

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

答案 3 :(得分:0)

作为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。

答案 4 :(得分:0)

类似的问题让我在网上寻找解决方案。然后它打击我,我所要做的就是键入一个空格(或任何字符)并删除它,这将缓冲区标记为已更改。然后我可以正常输入C-x C-s。也许不复杂或先进,但它确实有效。