为什么在外部修改文件时在emacs中重新加载通知速度慢?

时间:2010-08-28 05:02:20

标签: git emacs

更新(版本控制)文件时,emacs不会立即显示状态。使用TextMate,如果某些内容因我正在编辑的文件而发生变化,它会立即通知我。

  • 有什么方法可以立即发出通知吗?
  • M-x load-file是检查某些内容是否发生变化的唯一方法?

ADDED

(custom-set-variables
 '(auto-revert-interval 1))
(global-auto-revert-mode 1)

它为恢复间隔设置1秒,它看起来效果很好。

2 个答案:

答案 0 :(得分:2)

您应该查看“自动恢复模式”。顾名思义,如果基础文件发生了变化,它将自动恢复缓冲区。

请注意,您仍然无法获得即时通知;相反,Emacs实际上会经常“轮询”文件(可通过“auto-revert-interval”进行配置;我认为大多数东西都使用5秒钟,而我正在仔细监控的日志文件则使用1秒钟。) / p>

我为所有事情打开了,就像这样:

(defvar running-on-windows
   (memq system-type '(windows-nt cygwin32 cygwin))
   "True if and only if we're running on Windows.  Both Win32 and
Cygwin count.")

(when (fboundp 'global-auto-revert-mode)

  ;; All the "reverting buffer foo" messages are _really_ distracting.
  (setq auto-revert-verbose nil)

  (global-auto-revert-mode 1)

  ;; just as the docs warn, this can really make Emacs sluggish.
  (if running-on-windows
      (if (fboundp 'lwarn)
          (lwarn
           'global-auto-revert-mode
           :warning
           "I just turned on global-auto-revert-mode.  It's nifty,
but it's REALLY SLOW when you have buffers that are visiting
remote files.  And despite its documentation, it does NOT ignore
those files, if you're using windows, and the file name begins
with a drive letter and a colon."))
    (setq global-auto-revert-non-file-buffers t)))

答案 1 :(得分:0)

在Emacs中将内容缓冲区从磁盘上的副本重新加载称为 reverting ,您可能对手册中的“还原”部分感兴趣。

如果你从Emacs进行版本控制,它应该负责恢复更新。

默认情况下,Emacs会在您保存后进行第一次更改时检查文件更新。


这是我在外部修改文件时使用的功能。

(defun revert-files (&rest files)
  "Reload all specified files from disk.
Only files that are currently visited in some buffer are reverted.
Do not ask confirmation unless the buffer is modified."
  (save-excursion
    (let ((revert-without-query '("")))
      (dolist (file-name files)
        (message "Considering whether to revert file %s" file-name)
        (let ((buf (find-buffer-visiting file-name)))
          (when buf
            (message "Reverting file in buffer %s" (buffer-name buf))
            (set-buffer buf)
            (revert-buffer t nil t)))))))

这是一个从shell命令调用它的脚本(它可以从用于版本控制操作的包装脚本调用)。

#!/bin/sh
files=
for x; do
  files="$files \"`printf '%s' "$x" | sed 's/[\\\\\\\"]/\\\\&/g'`\""
done
emacsclient -e "(revert-files$files)"

警告:我在复制代码时删除了代码中的一些内容,因此可能存在拼写错误。