我的日志文件采用以下格式:
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 :(得分: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
比区域更简单。