3

我正在为python编写一个编译器脚本。我有正确解析 Tracebacks 的错误格式:

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

我不明白为什么在逗号之前需要额外的转义:为什么\"%f\"\\,不能\"%f\"\,?我知道逗号需要转义,因为它用于分隔错误格式的部分,但为什么要使用两个反斜杠?

这是一个 Traceback 的示例,其中单转义不起作用,但双重转义:

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

另一个类似的例子是这个使用三个反斜杠的python编译器脚本!

(我问是希望理解为什么会更容易编写更多efm设置。)

4

1 回答 1

2

来自:help efm-entries

要在模式中包含逗号,在它前面加上一个反斜杠(你必须在 ":set" 命令中输入两个)。要包含反斜杠本身,请给出两个反斜杠(你必须在 ":set" 命令中输入四个)。你还需要在 ":set" 的空格前加上一个反斜杠。

在内部'errorformat',逗号是特殊的,即条目分隔符。要匹配文字逗号,您必须将其转义(一次)\,:. 好的,但是:set还有另一轮转义(例如处理值中的空格),所以\再次转义:\\,. :let通常,您可以通过使用(但不是在:CompilerSet此处的命令中)来避免第二轮转义。

于 2013-03-17T11:45:14.250 回答