如何在Vim中从括号外快速选择带括号的文本?
我知道我可以通过在正常模式下键入如何在Vim中从括号外快速选择带括号的文本?,vim,Vim,我知道我可以通过在正常模式下键入vi'或vi”来选择单引号或双引号内的文本。例如,光标位于字母H处: Hello "World" 我可以通过发布vi”来选择单词World 但如果将World插入括号而不是引用,则这似乎不起作用: Hello (World) 如果我的光标位于H,并且我尝试使用vi)选择World,则它不起作用。似乎唯一的方法是首先将光标移动到括号内,然后发出vi) 为什么选择括号和引号内的文本会有这种不同?在{a,i}×{(,),b}文本对象命令之间的差异
vi'
或vi”
来选择单引号或双引号内的文本。例如,光标位于字母H
处:
Hello "World"
我可以通过发布vi”
来选择单词World
但如果将World
插入括号而不是引用,则这似乎不起作用:
Hello (World)
如果我的光标位于H
,并且我尝试使用vi)
选择World
,则它不起作用。似乎唯一的方法是首先将光标移动到括号内,然后发出vi)
为什么选择括号和引号内的文本会有这种不同?在{
a
,i
}×{(
,)
,b
}文本对象命令之间的差异
它们的“
,”
,`
对应物主要来自
块和带引号字符串定义的差异
(请参见:help v_ab
,:help v_akote
)
后者是上一个引号字符的文本
当前行直到同一行上的下一行(逃逸行除外),
前者是前n个不匹配的开口之间的文本
括号和匹配的结束符。简单地说,命令
va(
(无计数)与[(v%
)类似,如果没有不匹配的值
光标前的括号,两者均不选择任何内容。但是,
命令va“
扫描当前行以查找匹配对
不管怎么说,都是引用
我想,造成这种行为差异的主要原因是
带引号的字符串与括号相反,假定为
非嵌套(至少在内置Vim文本对象的透视图中)
要选择当前行下一个括号中的文本,请选择
可以使用%vi(
或%va(
),具体取决于是否需要
是否分别在选择中包含括号。有一个脚本指向假定解决该问题的脚本
未经测试,但这是Steve Losh写的,所以可能不错。我肯定这个问题以前已经回答过了,但我找不到它!不幸的是,这个解决方案只适用于括号,而不适用于任何其他类型的括号。@Daniel:只需使用
%vi[
,%vi{
,%vi即可