Vim中的-syntax-highlighting

Vim 中的 syntax-highlighting 就是根据关键词来对文件内容进行高亮显示.

syntax keyword 定义一组语法类型并 link 到一个 highlight group

1
2
3
4
syntax keyword NewSyntaxGroup to times
syntax keyword NewSyntaxGroup where if

highlight link NewSyntaxGroup Keyword

这里的 syntax keyword 是定义的语法前缀.

NewSyntaxGroup 是定义的语法类型名称.

totimes 是这一组语法名称中的成员.

写了两行是进行扩充, 此时 NewSyntaxGroup 中有 to, times, where, if 这四个成员.

highlight link NewSyntaxGroup KeywordNewSyntaxGroup 这个语法类型的样式链接到 Keyword 这个Vim 内置样式.

syntax iskeyword

用于定义一个关键词可以由哪些字符组成. 如:

1
syntax iskeyword @,48-57,192-255,$,_

这里的 48-57192-255 都是 ASCII 码, 48-57 表示数字 0-9, 192-255 表示一些非英语语言的字符.

group-name

group-name 带 * 前缀的具有更高的优先级, 如:

  • *Ignore
  • *Error

syntax match 用正则表达式匹配关键词

1
2
syntax match NewSyntaxGroup "\v#.*$" 
highlight link NewSyntaxGroup Comment

这里的 NewSyntaxGroup 同样是定义一个语法组, \v#.*$ 为这个组的成员 (用正则表达式匹配)

注意 \v 的意思是 very magic(vim 的一中正则表达式模式).

需要注意的是, syntax match 不支持在一行中放多组正则表达式.

syn-priority

关于匹配同一个关键字对于高亮的应用的优先级:

  • Keyword 高于 MatchRegion

其他看 :h syn-priority

syntax region

匹配一个范围:

1
2
syntax region NewSyntaxGroup start=/\v"/ skip=/\v\\./ end=/\v"/
highlight link NewSyntaxGroup String

startend 指定开头和结束的位置.

skip 参数告诉Vim: “一旦你开始匹配这个区域,我希望你忽略skip匹配的内容,即使它会被当作区域结束的标志”.

这里 skip 匹配的是 \ 后加上一个字符, 如 \" (原本是用来转义的)


Vim中的-syntax-highlighting
http://example.com/2023/09/11/Vim中的-syntax-highlighting/
作者
Jie
发布于
2023年9月11日
许可协议