为什么我需要这个vim错误格式的额外转义?
我正在为python编写一个编译器脚本。我有一个正确解析回溯的错误格式:为什么我需要这个vim错误格式的额外转义?,vim,Vim,我正在为python编写一个编译器脚本。我有一个正确解析回溯的错误格式: CompilerSet errorformat= \%A\ \ File\ \"%f\"\\,\ line\ %l%.%#, \%Z\ \ \ \ %m 我不明白为什么我在逗号前需要额外的转义:为什么不能\%f\“\\,是\%f\\,?我知道逗号需要转义,因为它用于分隔errorformat的部分,但是为什么要用两个反斜杠呢 下面是一个回溯示例,其中单个转义不起作用,而双转义起作用
CompilerSet errorformat=
\%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,
\%Z\ \ \ \ %m
我不明白为什么我在逗号前需要额外的转义:为什么不能\%f\“\\,
是\%f\\,
?我知道逗号需要转义,因为它用于分隔errorformat的部分,但是为什么要用两个反斜杠呢
下面是一个回溯示例,其中单个转义不起作用,而双转义起作用:
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
回溯(最近一次呼叫最后一次):
文件“test.py”,第9行,在
g()
文件“test.py”,第7行,g中
f()
文件“test.py”,第4行,在f中
提升索引器()
索引器
另一个类似的例子是使用三个反斜杠
(我这样问是希望理解为什么会使编写更多的
efm
设置更容易。)来自:帮助efm条目
:
要在模式中包含逗号,请在其前面加反斜杠(必须键入
一个“:set”命令中有两个。要包含反斜杠,请给出两个反斜杠
(您必须在“:set”命令中键入四)。你还需要加一个反斜杠
在“:set”的空格之前
在'errorformat'
中,逗号是特殊的,即条目分隔符。要匹配文字逗号,必须对其进行转义(一次):\,
。好的,但是在:set
中有另一轮转义(例如,处理值中的空格),因此\
将在另一次转义:\,
。通常,您可以通过使用:let
(但不在此处的:CompilerSet
命令中)来避免第二轮转义