在Debian Wheezy上的Emacs 23.3.1上,运行ediff文件且文件结尾缺少换行符会导致错误\ No newline at end of file(我希望这是正确的翻译;在我的计算机上为德语\ Kein Zeilenumbruch am Dateiende.)。

是否可以只发出警告,以便我可以看到差异并对其进行处理(并修复丢失的换行符)?首先使ediff失败,然后打开文件,添加换行符,然后再次使ediff有点麻烦。

最佳答案

尝试更改变量ediff-diff-ok-lines-regexp的值以包含德语文本(“ Kein Zeilenumbruch am Dateiende”):

(setq ediff-diff-ok-lines-regexp
(连音
“ ^ \\(”
“ [0-9,] + [acd] [0-9,] + \ C-m?$”
“ \\ | []”
“ \\ | ---”
“ \\ |。*警告*:”
“ \\ |。*否+换行符”
“ \\ |。*缺少+换行符”
“ \\ |。** Kein + Zeilenumbruch + am + Dateiende”
“ \\ | ^ \ C-m?$”
“ \\)”))


更新:查看源代码,看来Ediff并未尝试处理diff中的消息本地化问题。还可以通过将diff包装在shell脚本中来解决此问题,例如:

#!/ bin / bash
LANG = C diff $ *


..然后自定义ediff-diff-program来调用包装器:

(setq ediff-diff-程序“〜/ bin / my-diff.sh”)


Emacs源目录lisp / vc中的其他代码似乎可以处理此问题,例如vc-hg-state

(defun vc-hg-state(文件)
“特定于汞的vc-state版本。”
...
(带有输出到字符串
(带电流缓冲器
标准输出
(setq状态
(无条件情况
;;忽略所有错误。
(让((process-environment
;;避免邮件的本地化,因此我们
;;可以解析输出。
(附加(列表“ TERM =哑”“ LANGUAGE = C”)
流程环境)))
...


Ediff也没有执行此操作似乎有点奇怪,但是也许我缺少了一些东西。

08-04 11:44