从Vim的括号外选择括号内的文本

问题描述 投票:13回答:2

我知道我可以通过发出vi'vi"来选择引号/双引号内的文本。例如,将光标放在H上,我可以通过发出World

选择vi"
Hello "World"

但是如果有的话,这似乎不起作用

Hello (World)

如果光标位于H,并且尝试使用World选择vi),则它不起作用。看来,执行此操作的唯一方法是将光标实际移动到括号内并发出vi)。为什么选择)和“中的文本会有所不同?

vim
2个回答
26
投票

{ai}×{[()b}文本对象命令之间的差异而它们的"'`对应项主要是由于blockquoted string的不同定义(请参见:help v_ab:help v_aquote)。

而后者是前一个引号字符的文本当前行,直到同一行的下一行(转义的行)撇开),前者是第n个前者之间不匹配的文本左括号和匹配的右括号。简单地说,命令va((无计数)类似于[(v%-如果没有光标前没有匹配的括号,两者均不选择任何内容。然而,命令va"扫描当前行以找到匹配的一对仍然引用。

我认为,这种行为差异的主要原因是与括号相反,引用的字符串被假定为非嵌套的(至少从内置Vim文本对象的角度来看)。

要在当前行的下一个括号中选择文本,一个可以使用

%vi(

或将括号包括在选择中,

%va(

1
投票

This comment on Hacker News指向一个脚本,据说可以解决该问题。

未经测试,但是史蒂夫·洛什(Steve Losh),所以可能不错。

© www.soinside.com 2019 - 2024. All rights reserved.