Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vim:日志文件的自定义高亮显示_Vim_Syntax Highlighting - Fatal编程技术网

vim:日志文件的自定义高亮显示

vim:日志文件的自定义高亮显示,vim,syntax-highlighting,Vim,Syntax Highlighting,我有以下形式的日志文件: YYYY-MM-DD HH:MM:SS.sss严重性[thread.name]类。名称:行- 严重性是调试、信息、警告或错误之一 我设置了一个语法文件,唯一地突出显示时间戳和每个不同的严重性。但是,现在我想突出显示线程名称、类名和行号。问题是日志消息中可能有方括号,因此简单地从+\[+开始并以+\]+结束是不可行的 我很想把我尝试过的东西记下来,但老实说,我就是不知道怎么做。以下是我目前掌握的文件: :syn region logTime start=+^\d\{4}-

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

YYYY-MM-DD HH:MM:SS.sss严重性[thread.name]类。名称:行-

严重性是调试、信息、警告或错误之一

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

我很想把我尝试过的东西记下来,但老实说,我就是不知道怎么做。以下是我目前掌握的文件:

: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

首先,您过度使用了
:语法区域
;对于严重性,一个更简单(更快!)
:syn关键字就足够了:

:syn keyword logInfo INFO
由于线程名称位于严重性之后(空格之后),因此可以指示Vim在之后专门尝试解析这些名称:

:syn keyword logInfo INFO skipwhite nextgroup=logThreadName
为避免在别处解析括号内的线程名称,请指定包含的
参数:

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

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

我建议阅读后面的章节,我认为最好使用
hi link
,这样配色方案就可以控制你的颜色。例如,
hi-link-logError-Error
您能解释一下
hi-link
是如何工作的吗?如果我不告诉它用户的颜色,它怎么知道呢?Hi-link只是将一个语法高的组链接到一个已经存在的组。Vim在默认情况下有很多这样的功能,只需输入highlight命令,不带任何参数即可列出。谢谢!对于类名和行号,会是相同的吗?我可以使用nextgroup=logClassName
中包含的
:syn match logThreadName“\[\S\+]”,然后使用
:syn match logClassName“\S\+:\d\+”
?是的,可以这样链接它们;不过,别忘了
skipwhite