2015-01-15 29 views
2

我有日誌的格式如下文件:VIM:定製高亮日誌文件

YYYY-MM-DD HH:MM:SS.sss SEVERITY [thread.name] class.name:line -

嚴重性DEBUG之一,INFO,WARN,或ERROR。

我有一個語法文件設置,唯一地突出顯示時間戳和每個不同的嚴重性。但是,現在我想突出顯示線程名稱以及類名和行號。問題是日誌消息中可能會有方括號,因此僅從+\[+開始,到+\]+結束將不起作用。

我很想放下我嘗試過的東西,但老實說,我只是不知道該怎麼做。這裏的文件我到目前爲止:

:syn region logTime start=+^\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2}+ end=+ +me=e-1 
:syn region logError start=+ERROR+ end=+ +me=e-1 
:syn region logWarn start=+WARN+ end=+ +me=e-1 
:syn region logInfo start=+INFO+ end=+ +me=e-1 
:syn region logDebug start=+DEBUG+ end=+ +me=e-1 

hi def logError ctermfg=white ctermbg=red 
hi def logWarn ctermfg=yellow 
hi def logInfo ctermfg=green 
hi def logDebug ctermfg=blue 
hi def logTime ctermfg=white ctermbg=blue 
+0

我建議閱讀[this。](http://learnvimscriptthehardway.stevelosh.com/)的後面幾章。另外,我認爲如果你使用'hi link'會更好,所以配色方案會有控制你的顏色。例如,'你好鏈接logError錯誤' – EvergreenTree 2015-01-15 15:33:47

+0

你能解釋'hi link'的工作原理嗎?如果我不告訴它用戶使用什麼顏色,它會如何知道? – ewok 2015-01-15 16:20:25

+0

嗨鏈接只是鏈接語法highlgihting組與一個已經存在的組。 Vim在默認情況下有很多這樣的功能,只需輸入高亮命令即可,無需任何參數。 – EvergreenTree 2015-01-15 16:27:42

回答

3

首先,你過度使用:syntax region; (!更快)的嚴重性,一個更簡單的:syn keyword是不夠的:

:syn keyword logInfo INFO 

由於線程名而來的嚴重程度(空格後),您可以指示Vim的具體試圖事後分析那些:

:syn keyword logInfo INFO skipwhite nextgroup=logThreadName 

爲了避免括號內的線程名在別處分析,指定contained參數:

:syn match logThreadName "\[\S\+\]" contained 

同樣,:syn match比地區簡單。

+0

謝謝!對於類名和行號,它會是同一類的東西?我可以使用':syn match logThreadName「\ [\ S \ + \]」包含nextgroup = logClassName'然後':syn match logClassName「\ S \ +:\ d \ +」'? – ewok 2015-01-15 16:15:36

+1

是的,你可以像這樣鏈接它們;不過,不要忘記'skipwhite'! – 2015-01-15 16:52:01