2

我知道 vim 有一个彩虹插件,它可以为左括号和右括号着色,我知道 vim 可以突出显示匹配的括号。我希望 vim 在我目前所在的括号范围内强调所有内容。

例如:让 | 为当前光标位置,则:

(a|bc (de fg))

会强调一切。

(abc (de |fg))

只会下划线(de fg)

这甚至可能吗?

4

2 回答 2

7

这场比赛似乎运作良好:

syn match Foo /([^(]*\%#.*)/
hi link Foo Underlined

你可以把它放在你的 ~/.vimrc 或特定语言的语法文件中。

一步步:

syn match Foo- 根据正则表达式匹配语法组并将其命名为 Foo

/([^(]*- 匹配 a(后跟无限量或 0 的任何字符,除了(

\%#- 匹配当前光标位置

.*- 匹配无限数量或 0 个任意字符

)- 匹配一个)

hi link Foo Underlined- 将 Foo 组链接到带下划线的

应该注意的是,这是一个不完美的解决方案,因为正则表达式不适用于嵌套子结构。Rainbow Parenthesis通过添加多达 13 级递归来实现这一点,但它不提供无限递归。您可以使用我提供的正则表达式示例修改其 13 级递归,以完成任意数量的递归。我不确定可能对速度产生的影响。

于 2012-08-28T15:05:18.690 回答
4

您可以在以下内容中执行视觉上类似的操作.vimrc

nmap <f12> m[%v%:sleep 350m<CR>`[
imap <f12> <Esc>m[%v%:sleep 350m<CR>`[a

更多信息来源

于 2012-08-28T14:49:34.330 回答