在Debian Wheezy,Emacs 23.3.1中,运行带有文件的ediff文件最后会丢失换行符导致错误\ No newline at end of file
(我希望这是正确的翻译;它是德语{{1}在我的电脑上。)
是否可以只发出警告,以便我可以看到差异并对其进行处理(并修复丢失的换行符)?首先让ediff失败,然后打开文件,再次添加换行符,再加上ediff,这有点单调乏味。
答案 0 :(得分:8)
尝试更改变量ediff-diff-ok-lines-regexp
的值以包含德语文本(“Kein Zeilenumbruch am Dateiende”):
(setq ediff-diff-ok-lines-regexp (concat "^\\(" "[0-9,]+[acd][0-9,]+\C-m?$" "\\|[] " "\\|---" "\\|.*Warning *:" "\\|.*No +newline" "\\|.*missing +newline" "\\|.*Kein +Zeilenumbruch +am +Dateiende" "\\|^\C-m?$" "\\)"))
更新:查看源代码,似乎Ediff没有尝试处理来自diff
的邮件本地化问题。还应该可以通过将diff
包装在shell脚本中来解决此问题,例如:
#!/bin/bash LANG=C diff $*
..然后自定义ediff-diff-program
来调用包装器:
(setq ediff-diff-program "~/bin/my-diff.sh")
Emacs源目录中的其他代码lisp / vc似乎确实处理了这个问题,例如vc-hg-state
:
(defun vc-hg-state (file) "Hg-specific version of `vc-state'." ... (with-output-to-string (with-current-buffer standard-output (setq status (condition-case nil ;; Ignore all errors. (let ((process-environment ;; Avoid localization of messages so we ;; can parse the output. (append (list "TERM=dumb" "LANGUAGE=C") process-environment))) ...
似乎有点奇怪,Ediff也没有这样做,但也许我错过了一些东西。
答案 1 :(得分:0)
好的,我发现了什么是错的,很遗憾,很明显:我的环境有LANG=de
,因此当Emacs调用diff
时,警告信息也会以德语返回,而Emacs,不承认这个“未知”的消息,失败了。
使用LANG=C emacs
启动emacs解决此问题。但是,我认为emacs的一个(非常愚蠢的)错误是假设用户的语言是英语。