0

私は Emacs が初めてで、eshell を使用しようとしています。残念ながら、たとえば C ファイルにエラーがある場合、奇妙なエラー出力が表示されます (これは単なる例であり、特定のエラーは重要ではありません)。

^[[1m2-2.c:18:18: ^[[0m^[[0;1;31merror: ^[[0m^[[1mexpected ';' after expression^[[0m
    c = getchar()
^[[0;1;32m                 ^
^[[0m^[[0;32m                 ;
^[[0m^[[1m2-2.c:21:5: ^[[0m^[[0;1;31merror: ^[[0m^[[1muse of undeclared identifier 's'^[[0m
    s[i] = c;
^[[0;1;32m    ^
^[[0m2 errors generated.

これが何を意味するのか私にはわかりません。通常のbashではなくzshを使用しているので、何か関係があるのでしょうか?

通常の端末で同じファイルを実行すると、もちろんエラーが発生しますが、読み取りは可能です。

4

2 に答える 2

0

表示されているのは ansi エスケープ シーケンスです。ほとんどの端末エミュレーターは、これらを太字、さまざまな色などの異なるテキスト プロパティとして解釈します。

通常、Emacs はこれをうまく処理できます。デフォルトでは、これらの制御コードを処理できる出力フィルタが必要です。古いバージョンの emacs を実行しているか、何らかの理由で eshell の出力フィルターが変更されています。

-q スイッチを付けて emacs を実行し、eshell を開いてコンパイルを実行してみてください。それでも制御文字が表示される場合は、eshell 出力フィルター関数を設定して ansi-colour サポートを追加する必要があります。制御コードが表示されない場合は、init ファイル内の何かが出力フィルターを削除または破壊しています。

これは zsh に関連する可能性は低いです。実際、とにかく emacs が「内部で」sh または bash を使用していることに気付くでしょう。emacs は、プログラムの構築をより洗練された方法でサポートしていることにも注意してください。Emacs info マニュアルの Compiling and Testing Programs を参照してください。言語によっては、コンパイル プロセスを合理化して、再コンパイルをトリガーし、コンパイラ エラーとコードなどの間をジャンプする簡単な方法を使用して、プログラムのコンパイルをよりインタラクティブにすることができます。言語はemacsが「すぐに」理解できないようなものですが、それだけの価値があります。コードをローカルで編集したり、リモートサーバーで変更をコンパイルしたりするなど、本当にファンキーなこともできます.

最後に、今すぐ emacs の微調整に時間をかけたくない場合は、コンパイラ オプションを確認してください。ほとんどのコンパイラには、制御コードを無効にする方法があります。「色をオフにする」やエラーメッセージのフォーマットなどを探します。

于 2016-12-28T00:44:18.510 に答える