在 vim 中,向后搜索匹配的大括号/括号

在 vim 中,向后搜索匹配的大括号/括号

正如你们大多数人可能知道的那样,您可以使用%在线上向前搜索来查找下一个配对的大括号/中括号/括号并移动到其匹配的伙伴:

|a|rray[index] = value;
" |e| is the cursor; hit %:
array[index|]| = value;

我希望有一个类似的键可以在线向后搜索,例如:

array[index] = value|;|
" |;| is the cursor again, hit the key I'm looking for:
array|[|index] = value;

大多数 vim 命令都有向后和向前的功能,所以看起来应该如此。它没有伙伴吗?如果是这样,那是因为一旦它配对的角色他们会表现得一样吗?

答案1

如果你真的想要向后搜索常见的匹配字符,您可以使用以下vim特定命令之一:

  • [(...(转到上一个不匹配的(字符)
  • [{...(转到上一个不匹配的{字符)

这两个命令有匹配的转发伙伴:

  • ])...(转到下一个不匹配的)字符)
  • ]}...(转到下一个不匹配的}字符)

还有其他类似的#ifdefC 注释命令。

vim您可以使用命令找到更多信息:help %

答案2

% 找到匹配的括号。因此,如果您在 ( 或 { 上,它将向前搜索。

如果您位于 } 或 ) 上,它将向后搜索。

% 没有方向性,它只是寻找匹配的括号。

答案3

我刚刚尝试过:map ^] ^%%(这里用^]= Ctrl+ v Ctrl+5来类比%= Shift+ 5)。

它适用于给定的特定情况,但因为它不会从光标向后搜索,所以它总是选择行上的第一个左括号,如果找不到任何匹配项,则将光标保留在行的开头。


这是一个更好的解决方案;它很丑陋,可能还有很大的简化空间,但我认为语义完全正确(如果没有开放括号,则不会移动光标,并移动到第一的在当前列之前打开括号)。

:map ^] ^[:call search("[({[]", "bes", line("."))^M

为了

  • ^]= Ctrl+ v Ctrl+5
  • ^[= Ctrl+v Esc
  • ^M= Ctrl+v Return

相关内容