我知道我可以通过发出vi'
或vi"
来选择引号/双引号内的文本。例如,将光标放在H
上,我可以通过发出World
vi"
Hello "World"
但是如果有的话,这似乎不起作用
Hello (World)
如果光标位于H
,并且尝试使用World
选择vi)
,则它不起作用。看来,执行此操作的唯一方法是将光标实际移动到括号内并发出vi)
。为什么选择)和“中的文本会有所不同?
{a
,i
}×{[(
,)
,b
}文本对象命令之间的差异而它们的"
,'
,`
对应项主要是由于block和quoted string的不同定义(请参见:help v_ab
,:help v_aquote
)。
而后者是前一个引号字符的文本当前行,直到同一行的下一行(转义的行)撇开),前者是第n个前者之间不匹配的文本左括号和匹配的右括号。简单地说,命令va(
(无计数)类似于[(v%
-如果没有光标前没有匹配的括号,两者均不选择任何内容。然而,命令va"
扫描当前行以找到匹配的一对仍然引用。
我认为,这种行为差异的主要原因是与括号相反,引用的字符串被假定为非嵌套的(至少从内置Vim文本对象的角度来看)。
要在当前行的下一个括号中选择文本,一个可以使用
%vi(
或将括号包括在选择中,
%va(
This comment on Hacker News指向一个脚本,据说可以解决该问题。
未经测试,但是史蒂夫·洛什(Steve Losh),所以可能不错。