試着改變變量ediff-diff-ok-lines-regexp
的價值,包括德語文本(「KEIN Zeilenumbruch是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
的消息本地化問題。它也應該可以通過在shell腳本包裝diff
來解決這個問題,比如:
#!/bin/bash
LANG=C diff $*
..then定製ediff-diff-program
調用包裝來代替:
(setq ediff-diff-program "~/bin/my-diff.sh")
其他代碼在Emacs的源目錄口齒不清/ 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不也做這,但也許我錯過了一些東西。
你是什麼意思ediff'錯誤'和'失敗'?你是否想在文件尾部處理一個缺失的換行符,或者不要(在這種情況下,你可以將'ediff-diff-options'設置爲'「-w」'來忽略空白區別)? – 2012-02-11 18:40:04
與「失敗」我的意思是,而不是得到一個差異,'ediff文件'停止錯誤消息'差錯輸出錯誤。 Diff輸出在#<緩衝區* ediff-diff *>'和一個緩衝區* * ediff-errors *'彈出'\ Kein Zeilenumbruch ...'。是的,我寧願如果問題顯示給我作爲警告,然後顯示差異。用'-w',錯誤仍然存在。 (但是,如果我想查找空白區別,這不會起作用。) – 2012-02-11 22:36:11
好吧,我明白你的意思了,如果我把我的語言設置爲德語,我會得到同樣的錯誤。正如你在答案中所說的那樣,Emacs期望diff的輸出是英文的。我提出了另一個解決方法。 – 2012-02-12 03:37:34