当磁盘上的文件发生更改时,如何让 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 自动刷新所有缓冲区?的主要内容,如果未能解决你的问题,请参考以下文章
使用 tramp 自动保存其他窗口时 Emacs 更改缓冲区