3

Python用のコンパイラスクリプトを書いています。トレースバックを正しく解析する次のエラー形式があります。

CompilerSet errorformat=
          \%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,
          \%Z\ \ \ \ %m

カンマの前に余分なエスケープが必要な理由がわかりません。なぜできないのです\"%f\"\\,\"%f\"\,?エラー形式のセクションを区切るために使用されるため、カンマをエスケープする必要があることは理解していますが、なぜ2つの円記号があるのでしょうか。

シングルエスケープは機能しないが、ダブルエスケープは機能するトレースバックの例を次に示します。

Traceback (most recent call last):
File "test.py", line 9, in <module>
    g()
File "test.py", line 7, in g
    f()
File "test.py", line 4, in f
    raise IndexError()
IndexError

もう1つの同様の例は、3つの円記号を使用するこのPythonコンパイラスクリプトです。

(理由を理解することで、より多くの設定を簡単に記述できるようになることを願っていefmます。)

4

1 に答える 1

2

差出人:help efm-entries

パターンにコンマを含めるには、その前に円記号を付けます( ":set"コマンドに2つ入力する必要があります)。バックスラッシュ自体を含めるには、2つのバックスラッシュを指定します(「:set」コマンドに4つ入力する必要があります)。また、「:set」のスペースの前に円記号を付ける必要があります。

内部'errorformat'では、コンマは特別です。つまり、エントリセパレータです。リテラルのコンマと一致させるには、それを(1回)エスケープする必要があります\,。わかりましたが、:setエスケープの別のラウンドがあります(たとえば、値のスペースを処理するため)。そのため、\は別のときにエスケープされます\\,。多くの場合、を使用することで、その2回目のエスケープを回避できます:let(ただし、:CompilerSetここのコマンドでは回避できません)。

于 2013-03-17T11:45:14.250 に答える