当磁盘上的文件发生更改时,如何让 Emacs 自动刷新所有缓冲区?

Posted

技术标签:

【中文标题】当磁盘上的文件发生更改时,如何让 Emacs 自动刷新所有缓冲区?【英文标题】:How to have Emacs auto-refresh all buffers when files have changed on disk? 【发布时间】:2010-12-01 14:55:25 【问题描述】:

我有一个非 emacs 全局搜索和替换功能,它使我的磁盘文件变得比我的 emacs 缓冲区(整体)更新。有什么方法可以告诉 emacs 一下子刷新磁盘中的所有缓冲区,而不必通过重新加载文件来单独执行每个缓冲区?

谢谢! D

【问题讨论】:

global-auto-revert-mode 神奇... 【参考方案1】:

(global-auto-revert-mode t) 在您的 .emacs 中。

【讨论】:

这在我总是想保持同步的情况下看起来不错,谢谢!我想我最终会使用 revbuffs,这样我就可以自己管理冲突(否则有时我可能会丢失未保存的更改,我的工作流程目前的工作方式。) 谢谢!我正在使用 revbuffs 和 auto-revert-mode 的组合。当我想覆盖更改时,自动恢复模式非常有用。 @Dave: (global-)auto-reverse-mode 不会在相应的缓冲区被修改时恢复文件,所以应该没有丢失未保存更改的风险。 我已经在 .emacs 中设置了变量,但是当我编辑一些代码 xcode 时,然后在该行读取文件(已经打开),在 xcode 中编辑不存在,需要 Mx revert-buffer 手。 (mac + emacs 24.3.1) 在使用 git 切换分支时效果很好。谢谢!【参考方案2】:

如果您使用的是 Emacs GUI(我的是 Windows 7 上的 GNU Emacs 25.1.1),这是一个替代方案:

    点击菜单栏中的“选项” 选择“自定义 Emacs” 选择“保存的选项” 然后您应该会看到一个搜索字段,您可以在其中输入 "global-auto-revert-mode" 并按 "Search" 按钮 点击“切换”按钮并确保按钮右侧显示为“on” 按搜索字段正下方的“应用并保存”按钮

如果您已经打开了一些文件,您应该会看到它立即生效。祝你好运!

【讨论】:

【参考方案3】:

感谢@Ashwin 指出(global-auto-revert-mode t)。我发现 Emacs 不会自动更新磁盘上文件已更改的缓冲区,仅此更改。来自https://www.gnu.org/software/emacs/manual/html_node/emacs/Reverting.html:

默认情况下,Auto-Revert 模式使用文件通知工作,文件系统中的更改由操作系统报告给 Emacs。您可以通过将变量 auto-revert-use-notify 自定义为 nil 值来禁用文件通知,然后 Emacs 将通过每五秒轮询一次来检查文件更改。您可以通过变量 auto-revert-interval 更改轮询间隔。

在我设置(setq auto-revert-use-notify nil) 之后,Emacs 确实每 5 秒刷新一次所有缓冲区。

【讨论】:

你的意思是(setq auto-revert-use-notify nil),因为它是一个变量?

以上是关于当磁盘上的文件发生更改时,如何让 Emacs 自动刷新所有缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章

如果磁盘上的文件发生更改,如何重新加载 python 类?

使用 tramp 自动保存其他窗口时 Emacs 更改缓冲区

如何在保存之前对Emacs中更改的行执行操作?

当 CMake 中的生成器或输入发生更改时,如何仅构建自动生成的代码?

如何让 Firefox 在文件更改时自动刷新?

如何在 OSX 上的应用程序运行时获取更改名称的文件?