我知道 vim 有一个彩虹插件,它可以为左括号和右括号着色,我知道 vim 可以突出显示匹配的括号。我希望 vim 在我当前所在的括号范围内为所有内容加下划线。
例如:让|为当前光标位置,则:
(a|bc (de fg))
会强调一切。
(abc (de |fg))
只会在 (de fg)
下划线。
这可能吗?
最佳答案
这场比赛似乎很顺利:
syn match Foo /([^(]*\%#.*)/
hi link Foo Underlined
你可以把它放在你的 ~/.vimrc 或特定语言的语法文件中。
一步一步:
syn match Foo
- 根据正则表达式匹配语法组并将其命名为 Foo
/([^(]*
- 匹配 (
后跟不限数量的任何字符或 0 除 (
\%#
- 匹配当前光标位置
.*
- 匹配无限量或 0 个任意字符
)
- 匹配 )
hi link Foo Underlined
- 将 Foo 组链接到 Underlined
应该注意的是,这是一个不完美的解决方案,因为正则表达式对于嵌套子结构来说并不理想。 Rainbow Parenthesis通过添加多达 13 级递归来实现这一点,但它不提供无限递归。您可以使用我提供的正则表达式示例修改其 13 级递归,以完成任意数量的递归。我不确定可能对速度产生的影响。
关于vim - 是否可以让 vim 在我的光标当前所在的括号范围内加下划线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12161508/