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


176

我有一个非emacs全局搜索和替换功能,该功能使我的磁盘文件比我的emacs缓冲区(大量)更新。有什么方法可以告诉emacs一口气刷新磁盘上的所有缓冲区,而不必通过重新加载文件来单独完成每个缓冲区?

谢谢!d


global-auto-revert-mode发挥了魔力……
豪尔赫·阿吉拉尔

Answers:


229

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


在我一直想保持同步的情况下,这看起来不错,谢谢!我想我最终将使用revbuffs以便自己处理冲突(否则有时我可能会丢失未保存的更改,这是我的工作流程当前的工作方式。)
Dave

2
谢谢!我正在使用revbuffs和auto-revert-mode的组合。当我想覆盖更改时,自动恢复模式效果很好。
Natan Yellin

12
@Dave:如果修改了相应的缓冲区,则(global-)auto-reverse-mode将不会还原文件,因此不会有丢失未保存的更改的风险。
Lindydancer 2012年

我已经在.emacs中设置了变量,但是当我编辑一些代码xcode时,然后在该行读取文件(已经打开),在xcode中编辑不存在,需要Mx还原缓冲区。(mac + emacs 24.3.1)
ericfang

6
用git切换分支时效果很好。谢谢!
贾斯汀·莱特布

10

如果您正在使用Emacs GUI(在Windows 7上,我的计算机是GNU Emacs 25.1.1),则可以使用以下替代方法:

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

如果您已经打开了几个文件,则应该立即看到此效果。祝好运!


3

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.