vim 语法:如何使用包含的字段
vim syntax: how to use contained fields
跟进
我的日志语法已更改。我现在必须在时间之前包含用户名,所以新格式是:
[username] time LEVEL filepath:line - message
我定义各个区域没有问题:
syn region logUser start=+^\[+ end=+\] +me=e-1 contained
syn match logTime "\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2},\d\{3}" contained
syn keyword logCritical CRITICAL contained
syn keyword logError ERROR contained
syn keyword logWarn WARN contained
syn keyword logInfo INFO contained
syn keyword logDebug DEBUG contained
syn match logFileAndNumber " \S\+:\d\+ - " contains=logFile,logLineNumber
syn match logFile " \S\+:" contained
syn match logLineNumber "\d\+" contained
问题是我不知道如何在开始时创建一个区域,这样我就不会在任何时候看到其中一个日志级别,或者消息中出现时间戳时突出显示,或者某物。链接问题的答案适用于以前的格式,但解释方式不多,所以我不太明白它在做什么。
编辑:有没有办法简单地定义较小的区域,然后将较大的区域定义为一系列较小的区域?我知道这行不通,但大致如下:
syn match logBeginning "$logUser $logTime [$logCritical|$logError|$logWarn|$logInfo|$logDebug]"
如果顺序(用户、时间、严重性...)是固定的,您可以使用nextgroup=...
属性将它们链接在一起。因此,将第一个 (logUser
) 设置为未包含的(以便它匹配任何地方),并指示 Vim 检查其后的 logTime
(仅后跟空格)。所有其他组都是 contained
以避免在其他地方匹配。
syn region logUser start=+^\[+ end=+\] +me=e-1 nextgroup=logTime skipwhite
syn match logTime "\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2},\d\{3}" contained nextgroup=logCritical,logError,logWarn,logInfo,logDebug skipwhite
...
CP。 :help :syn-nextgroup
.
跟进
我的日志语法已更改。我现在必须在时间之前包含用户名,所以新格式是:
[username] time LEVEL filepath:line - message
我定义各个区域没有问题:
syn region logUser start=+^\[+ end=+\] +me=e-1 contained
syn match logTime "\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2},\d\{3}" contained
syn keyword logCritical CRITICAL contained
syn keyword logError ERROR contained
syn keyword logWarn WARN contained
syn keyword logInfo INFO contained
syn keyword logDebug DEBUG contained
syn match logFileAndNumber " \S\+:\d\+ - " contains=logFile,logLineNumber
syn match logFile " \S\+:" contained
syn match logLineNumber "\d\+" contained
问题是我不知道如何在开始时创建一个区域,这样我就不会在任何时候看到其中一个日志级别,或者消息中出现时间戳时突出显示,或者某物。链接问题的答案适用于以前的格式,但解释方式不多,所以我不太明白它在做什么。
编辑:有没有办法简单地定义较小的区域,然后将较大的区域定义为一系列较小的区域?我知道这行不通,但大致如下:
syn match logBeginning "$logUser $logTime [$logCritical|$logError|$logWarn|$logInfo|$logDebug]"
如果顺序(用户、时间、严重性...)是固定的,您可以使用nextgroup=...
属性将它们链接在一起。因此,将第一个 (logUser
) 设置为未包含的(以便它匹配任何地方),并指示 Vim 检查其后的 logTime
(仅后跟空格)。所有其他组都是 contained
以避免在其他地方匹配。
syn region logUser start=+^\[+ end=+\] +me=e-1 nextgroup=logTime skipwhite
syn match logTime "\d\{4}-\d\{2}-\d\{2} \d\{2}:\d\{2}:\d\{2},\d\{3}" contained nextgroup=logCritical,logError,logWarn,logInfo,logDebug skipwhite
...
CP。 :help :syn-nextgroup
.