我正在为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
另一个类似的例子是使用三个反斜杠的this python compiler script!
(我希望了解为什么会更容易编写更多efm
设置。)
答案 0 :(得分:1)
来自:help efm-entries
:
要在模式中包含逗号,请在其前面加上反斜杠(您必须键入 两个在“:set”命令中)。要包含反斜杠本身会给出两个反斜杠 (您必须在“:set”命令中键入四)。你还需要反斜杠 在“:set”的空格之前。
在'errorformat'
内,逗号是特殊的,即条目分隔符。要匹配文字逗号,您必须将其转义(一次):\,
。好的,但在:set
中还有另一轮转义(例如处理值中的空格),因此\
会再次转义:\\,
。通常,您可以使用:let
(但不在此处的:CompilerSet
命令中)避免第二轮转义。