auto-revert 如何只revert可见的buffer?

最近遇到两个开global-auto-revernt-mode造成的卡顿:

  • 打开一个几百M大小的log文件,然后做其他事情去了,忘记它是打开的。log在持续写入,不断revert,卡到无法操作。
  • 用dired打开了一个包含几千个文件的目录,然后就去编辑其中的某个文件了,忘记目录是打开的。开profile操作一段时间后,发现revert-buffer平均cpu占用超过10%。关掉这个buffer后,就不卡了。

如何设置只有当前可见的buffer,才auto-revert呢?

改用mode hook来enable auto-revert-mode吧,它是针对当前buffer打开的。比如

(add-hook 'prog-mode '(lambda () (auto-revert-mode 1)))

你 没有 关闭

666 但还是希望switch到这个log buffer后,它能auto-revert

嗯,有时候干别的事情去了,忘记开着这家伙。而且还要回来关注这个log的,所以不打算关闭它

简单的办法是让auto-revert使用定时器去检测变化,同时把定时器的周期设置长一点,默认是5秒, 这样5秒才刷新一次,应该不会卡顿。

(setq auto-revert-use-notify nil)

那log的buffer不自动revert,然后绑个快捷键手动revert-buffer?

说起来log这种文件我肯定去terminal里看了,怕玩崩emacs :joy: