【问题标题】:Is it possible to have vim underline the scope of parentheses my cursor is currently in?是否可以让 vim 在我的光标当前所在的括号范围内加下划线?
【发布时间】:2012-08-28 14:27:30
【问题描述】:

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

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

(a|bc (de fg))

会在所有内容下划线。

(abc (de |fg))

只会在(de fg)下划线。

这可能吗?

【问题讨论】:

  • 在“我想查看当前范围”中加下划线。或如“我想在当前范围内采取行动。”? vi( 负责后者,但您需要为第一个创建新的语法规则。
  • “我想查看当前范围”中的下划线。
  • 你应该接受康纳的回答。

标签: vim vim-syntax-highlighting


【解决方案1】:

这场比赛似乎效果很好:

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

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

一步一步:

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

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

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

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

) - 匹配)

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

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

【讨论】:

  • 酷,谢谢!它几乎可以工作。我想用它编辑 Python,但它没有启动。
【解决方案2】:

您可以在 .vimrc 中使用以下内容进行视觉上类似的操作:

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

more information at the source

【讨论】:

  • 那会添加一个我必须按下才能获得着色的键,对吧?
猜你喜欢
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多