为什么在这个vim错误格式中需要额外的转义?

时间:2013-03-16 22:32:36

标签: vim

我正在为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设置。)

1 个答案:

答案 0 :(得分:1)

来自:help efm-entries

  

要在模式中包含逗号,请在其前面加上反斜杠(您必须键入   两个在“:set”命令中)。要包含反斜杠本身会给出两个反斜杠   (您必须在“:set”命令中键入四)。你还需要反斜杠   在“:set”的空格之前。

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