【问题标题】:How to force Emacs to save even if it thinks (no changes need to be saved)即使它认为如何强制 Emacs 保存(无需保存更改)
【发布时间】:2011-03-14 01:15:24
【问题描述】:

这一直发生在我身上:

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

我可以使用其他功能或设置来强制 emacs 保存吗?

【问题讨论】:

    标签: emacs save


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的来信。但是,就我而言,如果我明确要求 emacs 保存,我希望它保存和更新时间戳等。事实上,时间戳假设首先似乎是问题,因为我正在使用 git 并且 git branch 会更改目录中的文件而不更新时间戳导致emacs认为它仍然是相同的旧文件:/
      【解决方案3】:

      您可以使用带有前缀 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))
      

      【讨论】:

      • 很好,谢谢!我认为这相当于下面的函数,所以我将使用该函数(这样我就可以为其分配一个键)。
      • 啊,以前从未听说过建议,我认为这些是在保存之前运行的某种钩子?听起来不错,谢谢你指点我。现在我必须在重新映射组合键以运行 scott' save-buffer-always 或使用建议之间做出选择... :)
      【解决方案4】:

      在 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`
      【解决方案5】:

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

      【讨论】:

      • 是的,谢谢,我一直在使用这些,但有点烦人。特别是对于 C-x C-w,您需要重新输入文件名并按 ENTER。我很想找到一些可以设置为键绑定并一键保存的东西。
      • @sligocki:我发现如果您在文件名提示符处按 而不输入任何内容,Emacs 将重新使用现有文件名。
      猜你喜欢
      • 2023-03-05
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      相关资源
      最近更新 更多