如何让 Emacs 立即自动重新载入文件?

我在 Emacs 当中编译并运行了二进制文件后(M-x compile),它会将结果输出到了 source.out 文件 但是如果我在 Emacs 中同时打开 source.out 这个文件,它会迟缓一两秒才能自动再入新内容 我怎么才能让它立刻载入新内容呢?


加图示意

这是之前的程序 然后我进行一定修改(把 First 改成 Second),再调用 M-x compile 然后运行,输出 Second 到 source.out 文件中 然后 Emacs 能够自行重新加载文件,结果变成了:

但是我编译运行至 Emacs 重新载入 out 文件的内容之间会有一两秒的 delay 请问有什么好的方法可以解决这个问题吗

Emacs 默认不会自动重新载入文件,Auto-Revert Mode 提供了这样的功能,如果你开启了这个 Mode 的话,Emacs 就会每隔约 5 秒钟(可通过选项 auto-revert-interval 调整)尝试重新载入,但如果你的 Emacs 有支持 File Notifications 的话(一般平台都有),在一个 5 秒钟周期中的首次修改会立即重新载入,如

在 Emacs 中打开 init.el,开启 Auto-Revert Mode。然后在终端中修改 init.el

$ echo AAA >> init.el ; sleep 1; echo BBB >> init.el

Emacs 会立即显示 AAA,然后过几秒(明显多于一秒但应该少于五秒)再显示 BBB。所以如果你不是非常频繁的修改文件的话,Emacs 看起来就是在立即自动重新载入;如果不是的话,你总是可以把 auto-revert-interval 调小一些。

1 个赞

对于 Auto-Revert Mode 的 5 秒间隔我也很疑惑,显然 Emacs 的表现看起来很"实时"。另外还有个更实时的 auto-revert-tail-mode

我怀疑楼主所说的延迟是编译时间,可以在窗口1打开一个文件 ~/revert-test.txt,开启auto-revert-tail-mode,然后窗口2打开 eshell,执行 echo $(date) >> ~/revert-test.txt 观察变化。

(附图和文字说明有点混乱)

不是编译时间,因为我的代码一般很短(算法题) 而且在 IDE 中可以立即显示

可惜 Mac 没有轻量的 C++ IDE(比如 DevC++) Code::Blocks 又是残废的表现:(

我在spacemacs的dotspacemacs/user-config里面加入下面的代码,没有生效,有人知道是为什么吗

  (global-auto-revert-mode 1)

我记得 spacemacs 默认开启 global-auto-revert-mode,你没必要再声明一下

不管用,只有开始的一次或者几次会revert一下,后面就不管用了,不知道为什么。

这应该与我用Windows关系不大吧。