vim 如何在没有光标跳转的情况下获得匹配的大括号突出显示

How to get matching brace highlighting without cursor jump in vim

我是 运行 vim 几台机器上的 7.3。默认情况下,我的所有实例都启用了 MatchParen。在我的 windows 机器上使用 gvim,它正在做我想要的——当我的光标在括号、paren 等上时,它在视觉上突出显示匹配项。它不影响光标导航。但是,在我的 Ubuntu 框中,当我将光标移动到字符上时,它实际上跳转到了匹配项。

我确定该行为是由 MatchParens 引起的,因为如果我执行 :NoMatchParen,它就会停止。不幸的是,那时我也没有突出显示。不过,我不知道我的设置在哪里不同。

如果你能给我一个插件,我会更喜欢你,它总是突出显示我当前位置周围最接近的封闭字符对(比如 MatchTagsAlways 的代码导向版本)

光标没有跳动。配色方案可能为 MatchParen 高亮组定义了错误的颜色,这使得它看起来像光标在跳跃。

运行 默认 gVim (v7.4.461) 在 openSUSE 13.2 Legacy 32 Bit:set showmatch? 中没有任何配置(即没有 .vim 文件)表明 showmatch 在开始时打开,而不是 Vim's stated default behaviour。我们可以通过在 .vimrc.

中添加 :set noshowmatch 来解决这个问题

当设置showmatch时,光标实际上在跳动,下面一行修复了这个问题:

set matchtime=0

更多详情: http://vimdoc.sourceforge.net/htmldoc/options.html#'matchtime'

就像FDinoff在接受的答案中所说的,这可能只是颜色的问题。

因此,如果匹配的“paren”的颜色让您迷惑,调整背景和前景的颜色可能是解决方案。

但是你是怎么做到的?? ^^

我经历了一段 vimdoc 的旅程(这并不容易)。 我测试了一大堆变量,发现相关的调整是 [hi]ghlight command,特别是 MatchParen 组。

解决方法

在我的 .vimrc 中添加这个就成功了:

hi MatchParen ctermfg=208 ctermbg=bg

请注意,vim 配置文件是从上到下读取的,某些类型的“单词”由多个选项匹配。例如,布尔值也可以是关键字。因此,您必须注意这些选项的顺序。

这是如何工作的?

我的问题是背景的颜色太艳丽,而前景的颜色和我终端的背景颜色一样,这让我很困惑。因此,切换颜色是解决方案 对我来说 。但也许您需要进行不同的调整。

首先,您可以通过输入以下命令(在 vim 内,在正常模式下)检查突出显示 MatchParen 的当前值:

:hi MatchParen

在当前样式中,您会看到 hi MatchParen 后跟 XXX,然后是用空格分隔的 argument=value 列表。

“终端”的重要参数是 ctermfgctermbg vim,“gui”的重要参数是 guifgguibg vim. (其中 fg 表示前景,bg 表示背景)

您可以更改一个值并实时查看结果。只需将光标放在匹配字符上并输入以下命令:

:hi MatchParen SomeArgument=SomeValue

这不会被保存,所以不用担心。当您找到合适的值组合时,您可以将它们添加到您的 .vimrc 中,如上所示。

就个人而言,我将 ctermfg 设置为 208(橙色),将 ctermbg 设置为 bg(当前背景颜色的关键字,如果 vim).
如果您在 gui 中使用 vim,请查看 here 以了解可用的颜色选择。