vim:自定义突出显示日志文件

时间:2015-01-15 15:13:52

标签: vim syntax-highlighting

我的日志文件采用以下格式:

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

1 个答案:

答案 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比区域更简单。