是否可以让vim强调我的光标当前所在的括号范围?

时间:2012-08-28 14:27:30

标签: vim vim-syntax-highlighting

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

例如:让|是当前光标位置,然后:

(a|bc (de fg))

会强调一切。

(abc (de |fg))

仅为(de fg)加下划线。

这甚至可能吗?

2 个答案:

答案 0 :(得分:7)

这场比赛看起来效果很好:

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

您可以将它放在〜/ .vimrc或特定语言的语法文件中。

一步一步:

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

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

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

.* - 匹配任意数量的无限数量或0

) - 匹配)

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

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

答案 1 :(得分:4)

您可以在.vimrc

中执行与以下内容类似的操作
nmap <f12> m[%v%:sleep 350m<CR>`[
imap <f12> <Esc>m[%v%:sleep 350m<CR>`[a

more information at the source