如何突出vim中的字典式语法?

时间:2014-02-23 03:25:44

标签: regex vim

所需的语法高亮显示如下:

世界:地球及其上的所有人和事 [Hello, world !]

这是一个字典单词,在':'后面有一个解释,在'['和']'之间有一个例句。突出显示了三个部分:

  1. 这个词,就像':'之前的字符所定义的那样。
  2. 整个例句,由'['和']'之间的字符定义。
  3. 例句中的单词(为了简化问题,我们可能只会突出显示句子中的第一个出现位置。)
  4. 我无法突出以上所有内容。最糟糕的是,我甚至无法使用以下规则突出显示简化语法,即':'之前和之后的同一个词:

    syntax match Keyword "^[^:]*"
    syntax match Underlined "^\([^:]*\):.*\zs\1"
    

    任何人都可以提供完整的答案吗?谢谢!

2 个答案:

答案 0 :(得分:0)

.vim/syntax为您的语言添加新文件,例如: mylang.vim 使用区域分隔语法的组件,如下所示。

然后,您可以将这些区域链接到您的colorscheme中的其他突出显示组(例如IdentifierString),或者为它们使用自定义颜色。

syn region   mylangHeader          start=+^+ end=+:+
syn region   mylangDesc            start=+\[+ end=+]+
syn region  mylangRow              start=+^+ end=+$+ contains=mylangHeader,mylangDesc
hi! link mylangHeader              Identifier
hi! link mylangRow                 String
hi! mylangDesc                     guifg=#00ff00

编辑文件后,set ft=mylang将触发此语法突出显示。如果需要,您可以在.vimrc中自动设置文件类型(基于文件扩展名)。

答案 1 :(得分:0)

以下正则表达式如何:([^:]*):[^\[]*\[(.*)\]?见http://regex101.com/r/oO0cD9。 第一个匹配组是冒号前的文本,第二个匹配组是括号中的文本。 以下正则表达式中的更新:([^:]*):[^\[]*\[(.*(\1).*)\]第三个匹配组将根据您的请求为您提供示例句中的单词。见http://regex101.com/r/rA6aT5