2013-03-16 73 views
2

我正在爲python編寫一個編譯器腳本。我有這樣的錯誤格式運用於是正確分析回溯:爲什麼在這個vim errorformat中需要額外的轉義?

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

我不明白爲什麼我需要額外的逃生逗號前:爲什麼不能\"%f\"\\,\"%f\"\,?我知道逗號需要被轉義,因爲它用於分隔錯誤格式的部分,但爲什麼使用兩個反斜槓?

這裏有一個回溯其中單逃逸不起作用的例子,但雙作用:

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

:help efm-entries

要在圖案的逗號,在它之前加上反斜槓(你必須在「:set」命令中鍵入 兩個)。要包含一個反斜槓本身給出兩個反斜槓 (你必須在「:set」命令中鍵入四)。您還需要在「:set」之前放置一個反斜槓 。

裏面'errorformat',逗號是特殊的,即一個項分隔。要匹配一個字面逗號,你必須逃避它(一次):\,。好的,但是在:set還有另一輪轉義(例如處理值中的空格),因此\會再次轉義:\\,。通常,您可以通過使用:let(但不在此處的:CompilerSet命令中)避免第二輪轉義。

相關問題