2012-02-11 25 views
4

Debian Wheezyでは、Emacs 23.3.1で最終的に改行がないファイルでediff-filesを実行すると、エラー\ No newline at end of fileになります; \ Kein Zeilenumbruch am Dateiende.私のコンピュータ上にあります。)Emacs ediffのエラー "ファイルの最後に改行がありません"

私はdiffを見て、それに取り組むことができます(そして欠けている改行を修正することができます)。最初にediffに失敗してから、ファイルを開き、改行を追加し、ediffをもう一度追加するのはちょっと面倒です。

+0

ediff 'erroring'と 'failing'はどういう意味ですか?ファイルの末尾に欠けている改行を違いとして扱いたいのですか?そうでない場合は、 'ediff-diff-options'を' '-w" 'に設定して空白の違いを無視できますか? –

+0

"失敗"とは、diffを取得する代わりに、 'ediff-files'が'エラー出力中のエラー 'というエラーメッセージで停止することを意味します。 diff出力は# 'にあり、バッファ' * ediff-errors * 'は' \ Kein Zeilenumbruch ... 'でポップアップします。そして、はい、私は問題が私に警告として表示され、次に差分が表示されることを希望します。 '-w'を指定すると、引き続きエラーが発生します。 (でも、空白の違いを探したいと思えば、これは役に立たないでしょう。) –

+0

OK、私はあなたが今何を意味しているのかを見て、自分の言語をドイツ語に設定すると同じエラーになります。あなたの答えで言うように、Emacsはdiffの出力を英語で期待しています。私は別の回避策を提案しました。 –

答えて

7

はドイツ語のテキスト( "KEIN Zeilenumbruch午前Dateiende")が含まれるように変数ediff-diff-ok-lines-regexpの値を変更してみてください:

 
(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は「doesnのように見えるんdiffからのメッセージのローカライゼーションの問題に対処しようとしています。また、例えば、シェルスクリプトでdiffをラップすることによってこの問題を回避することが可能です:

 
(setq ediff-diff-program "~/bin/my-diff.sh") 

のEmacsの他のコード:代わりにラッパーを呼び出すためにediff-diff-programをカスタマイズ

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

..then

 
(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も行っていないことを少し奇妙に思える:ソースディレクトリのlisp/VCは、たとえばvc-hg-stateのために、これを処理するように見えるんこれは、おそらく私は何かが欠けている。

+0

ありがとう、私はこの変数について知りませんでした。今では、可能なすべての言語に対して正規表現を追加するだけです... –

+1

確かに - 私の更新された答えを見てください。 –

+0

LC_ALL = C diff $ * – tangxinfa

0

私は何が間違っているのか分かりました。私の環境はLANG=deです。したがって、Emacsがdiffを呼び出すと、警告メッセージがドイツ語でもEmacsでも返され、この "不明"メッセージは認識されません失敗する。

LANG=C emacsでemacsを起動するとこの問題を回避できます。しかし、私はemacsの(非常にばかげた)バグと見なし、ユーザーの言語が英語であることを前提にしています。

+2

それは報告する価値があるようです。 'M-x report-emacs-bug' – phils

関連する問題