我知道我可以通过键入 vi'
来选择单引号或双引号内的文本。或 vi"
在正常模式下。例如,光标位于字母 H
这里:
Hello "World"
我可以选择单词 World
通过发出 vi"
.但这似乎不起作用如果
World
被括起来而不是被引用:Hello (World)
如果我的光标位于 H
我尝试选择 World
使用 vi)
, 这是行不通的。似乎唯一的方法是首先将光标实际移动到括号内,然后才发出 vi)
.为什么选择括号和引号内的文本会以这种方式不同?
最佳答案
{ a
的区别, i
}×{ (
, )
, b
} 文本对象命令
和他们的 "
, '
, `
对应物主要来自
块和带引号的字符串定义的差异
(见 :help v_ab
、 :help v_aquote
)。
而后者是来自前一个引号字符的文本
当前行直到同一行上的下一个(转义的放在一边),
前者是前第n个不匹配开头之间的文本
括号和匹配的结束之一。简单地说,命令va(
(没有计数)就像 [(v%
——如果没有无与伦比的
光标前的括号,都没有选择。然而,
命令 va"
扫描当前行以找到匹配对
无论如何。
我想,这种行为差异的主要原因是
与括号相反,带引号的字符串被假定为
非嵌套(至少从内置 Vim 文本对象的角度来看)。
要选择当前行下一个括号中的文本,
可以使用 %vi(
或 %va(
,取决于是否需要
分别在选择中包含或不包含括号。
关于vim - 如何从 Vim 中的括号外快速选择带括号的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7803905/