【发布时间】:2011-03-14 01:15:24
【问题描述】:
这一直发生在我身上:
- 我在 emacs 中打开了一个文件,
- 我保存它('save-buffer),
- 磁盘上的文件更改(或被删除、移动等)
- 但我想要它回来,所以我尝试在 emacs 中再次保存('save-buffer),而不是保存它说“(不需要保存更改)”并且什么都不做。
我可以使用其他功能或设置来强制 emacs 保存吗?
【问题讨论】:
这一直发生在我身上:
我可以使用其他功能或设置来强制 emacs 保存吗?
【问题讨论】:
一个类似的问题让我上网寻找解决方案。然后我突然想到,我所要做的就是输入一个空格(或任何字符)并将其删除,这会将缓冲区标记为已更改。然后我可以正常输入 C-x C-s 。也许不复杂或不先进,但它确实有效。
【讨论】:
作为 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。
【讨论】:
您可以使用带有前缀 arg 的 Emacs-Lisp 函数 not-modified 将当前缓冲区标记为已修改,绑定到:
C-u M-~
如果您不直接调用新函数,上述答案将不起作用。 如果您想无缝更改 emacs 保存行为。最好的解决方案是创建一个建议:
(defadvice save-buffer (before save-buffer-always activate)
"always save buffer"
(set-buffer-modified-p t))
【讨论】:
在 save-buffer 周围包装一个函数,标记首先修改的缓冲区:
(defun save-buffer-always ()
"Save the buffer even if it is not modified."
(interactive)
(set-buffer-modified-p t)
(save-buffer))
【讨论】:
evil 的用户,您需要将其添加到您的配置中:(evil-declare-abort-repeat 'save-buffer-always) - 否则保存会破坏您的最后一个操作。见:emacs.stackexchange.com/questions/33287`
您可以使用 C-x C-w 另存为。那应该无条件地保存。您也可以只键入一个空格,然后在其上退格。 Emacs 足够聪明地意识到,如果您撤消到目前为止所做的所有事情,缓冲区不会发生任何变化,但是如果您进行了更改然后手动反转它们,它将认为缓冲区已被更改。
【讨论】: