我知道 vim 有一个彩虹插件,它可以为左括号和右括号着色,我知道 vim 可以突出显示匹配的括号。我希望 vim 在我目前所在的括号范围内强调所有内容。
例如:让 | 为当前光标位置,则:
(a|bc (de fg))
会强调一切。
(abc (de |fg))
只会下划线(de fg)
。
这甚至可能吗?
我知道 vim 有一个彩虹插件,它可以为左括号和右括号着色,我知道 vim 可以突出显示匹配的括号。我希望 vim 在我目前所在的括号范围内强调所有内容。
例如:让 | 为当前光标位置,则:
(a|bc (de fg))
会强调一切。
(abc (de |fg))
只会下划线(de fg)
。
这甚至可能吗?
这场比赛似乎运作良好:
syn match Foo /([^(]*\%#.*)/
hi link Foo Underlined
你可以把它放在你的 ~/.vimrc 或特定语言的语法文件中。
syn match Foo
- 根据正则表达式匹配语法组并将其命名为 Foo
/([^(]*
- 匹配 a(
后跟无限量或 0 的任何字符,除了(
\%#
- 匹配当前光标位置
.*
- 匹配无限数量或 0 个任意字符
)
- 匹配一个)
hi link Foo Underlined
- 将 Foo 组链接到带下划线的
应该注意的是,这是一个不完美的解决方案,因为正则表达式不适用于嵌套子结构。Rainbow Parenthesis通过添加多达 13 级递归来实现这一点,但它不提供无限递归。您可以使用我提供的正则表达式示例修改其 13 级递归,以完成任意数量的递归。我不确定可能对速度产生的影响。
您可以在以下内容中执行视觉上类似的操作.vimrc
:
nmap <f12> m[%v%:sleep 350m<CR>`[
imap <f12> <Esc>m[%v%:sleep 350m<CR>`[a