当磁盘上的文件发生更改时,Emacs会挂起。

5
我正在Windows 8操作系统上使用Emacs v24.3.1。
当我打开一个文件并在Emacs缓冲区中编辑时,如果该文件在磁盘上发生了变化,当我尝试对缓冲区进行更改时,minibuffer中会出现一条消息。
Fileblah.txt changed on disk; really edit the buffer? (y, n, r or C-h) 

我希望能够按下“r”键以重新加载文件的磁盘版本,但是没有任何反应。Emacs完全停止响应输入。列出的所有键都不起作用,据我所知,其他键也是如此。我无法从迷你缓冲区中使用“C-g”键。从任务栏关闭窗口键“Alt-F4”无效。我必须从任务管理器中结束进程。
有人知道我在这里做错了什么吗?
如果是各种模式之间不兼容的情况,请参考我的init.elhere。没有复杂的内容。以下是详细说明:
  • better-defaults(ido-mode、去除菜单栏、uniquify缓冲区`forward、saveplace)
  • recentf-mode
  • 自定义帧标题
  • visual-line-mode
  • 保存时需要最后一行为空并删除尾随空格
  • Markdown模式与自动模式列表
  • Flyspell与Aspell后端
  • Powershell模式与自动模式列表
  • Ruby自动模式列表
  • Puppet模式与自动模式列表
  • Feature(Gherkin)模式与自动模式列表

具体文件是一个启用了Github风格的Markdown模式和Flyspell模式的markdown文件。


2
运行 emacs -Q 并重新创建该情况。这将确定您的配置是否是一个因素。 - phils
@erjoalgo 是的,我可以将文件合并,但是由于我使用的是Windows操作系统,所以实际上使用的是PowerShell命令“Get-Content”,而不是Unix/Linux下的“cat”命令。我不太清楚这两者之间的可比性。 - recf
2
我注释掉了与markdown-mode相关的内容,现在它可以工作了,所以肯定是那个有问题。我想提交一个补丁到这个项目中,但是我尝试查看markdown-mode.el的源代码,发现它有4500行,而且我对模式编写一无所知,所以我不确定从哪里开始查找。 - recf
1
刚刚给markdown-mode的作者Jason Blevins发送了电子邮件,询问他的建议,并附上了这个问题的链接。 - Ahmed Fasih
2
您没有提到正在使用哪个版本的markdown-mode(M-x markdown-show-version)。这听起来非常像一个已在[版本1.9](http://jblevins.org/projects/markdown-mode/rev-1-9)中修复的错误。最新版本是2.0:http://jblevins.org/projects/markdown-mode/ - Jason Blevins
显示剩余9条评论
2个回答

2

如问题评论中所述,此问题是由markdown-mode引起的,截至本回答(2015年4月23日),尚未修复。

然而,我在网上找到了一个解决方法,在此为后人复制粘贴。

(defun leo-markdown-fontify-buffer-wiki-links-empty ()
  "Empty replacement for `markdown-fontify-buffer-wiki-links` due to hanging bug."
  (interactive))

(eval-after-load "markdown-mode"
    '(progn
       (fset 'markdown-fontify-buffer-wiki-links
             'leo-markdown-fontify-buffer-wiki-links-empty)))

1
就调试挂起而言,您需要使用emacs -Q方法来确定是什么导致了提示混乱。但是为了避免提示,您可以在每个缓冲区中使用“auto-revert-mode”或启用“global-auto-revert-mode”。

当我运行 emacs -Q 时,还原提示功能可以正常工作,所以肯定是我的配置文件出了问题。我会进一步深入研究的。谢谢。 - recf
@recf 一个很好的起点是从你调整钩子的任何地方开始。 - stsquad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接