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

vim: custom highlighting for log files

我有以下形式的日志文件:

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

SEVERITY 是 DEBUG、INFO、WARN 或 ERROR 之一。

我设置了一个语法文件,它独特地突出显示了时间戳和每个不同的严重性。但是,现在我想突出显示线程名称以及 class 名称和行号。问题是日志消息中可能有方括号,所以简单地从 +\[+ 开始到 +\]+ 结束是行不通的。

我很想写下我尝试过的东西,但老实说,我只是不知道该怎么做。这是我目前拥有的文件:

: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

首先,您过度使用 :syntax region;对于严重性,更简单(更快!):syn keyword 就足够了:

:syn keyword logInfo INFO

由于线程名称在严重性之后(在空格之后),您可以指示 Vim 专门尝试在之后解析那些:

:syn keyword logInfo INFO skipwhite nextgroup=logThreadName

为避免括号中的线程名称在别处被解析,请指定 contained 参数:

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

同样,:syn match 比区域更简单。