在 Vim 中,我如何删除引号内的所有内容,包括引号本身?

81

例如,在以下内容中:

Testing "deleting" within quotes

当光标处于删除内部时,如何删除引号中的文本并包括引号,留下:

Testing within quotes

与https://dev59.com/JFoU5IYBdhLWcg3w_atJ密切相关。 - SibiCoder
3个回答

141
你可以使用以下序列删除包括引号在内的所有内容:
da"

请记住,这仅适用于单行文本,并且将删除最后一个引号后面的任何尾随空格。

正如下面评论中@James指出的那样,您还可以使用“删除内部”序列来删除引号内的字符而不删除引号:

di"

您还可以使用更改内部序列,从而删除字符并切换到插入模式,使您能够轻松替换引号内的文本:

ci"

6
我知道SO允许自己回答问题。但是你所问的确实是RTFM的事情...或许理解文本对象应该是新vim用户首先做的事情。关于da",你不仅可以在引号内部使用da",还可以在引号外部使用。例如,在行首,以删除第一个"..." - Kent
9
好的,虽然我添加了这段内容,因为对于初学者来说,这似乎是一个常见问题,而且还没有被问到或回答过(尽管有类似的问题)。对于初学者(可能不知道 Vim 的 ':help')来说,进行快速搜索通常比遍历手册更容易。如果您认为这有帮助,可以自由编辑答案并提出建议。 - blacktide
12
如果你已经知道自己要找什么,Vim的:help命令很有帮助。把这些操作文档化并放在易于查找的地方是非常有用的。 - Mad Wombat
12
补充:你也可以使用di"命令而不必删除引号。这种方法非常有用,特别是与ci"一起使用。 - DJMcMayhem
4
我知道这已经很旧了,但是不是每个人都能一直在手册中找到所有的东西。有时候你只是刚好错过了它。此外,像这样的问答使得寻找答案更加容易。 - NullVoxPopuli
显示剩余5条评论

39

我们可以使用

da"

针对您的情况,请使用di"删除“”内的内容。开始时最好使用文本对象进行编写,以下摘自:h text-objects的内容提供了两种形式:ia。引用如下:

这是一系列命令,只能在可视模式或操作符后使用。以“a”开头的命令选择一个包含空格的对象,“i”开头的命令选择一个不包含空格的“内部”对象,或者只选择空格。 因此,“内部”命令始终比“a”命令选择更少的文本。

文本对象对于其他字符对(例如(), {}等)也很有用。例如,在更改时很有用。

<code>if ( i == true ) {
}
</code>

<code>if (_) {
}
</code>

通过使用 ci( 或者 ci)


如何删除引号内从当前位置开始的内容?例如 "abc|de",其中 "|" 是光标的位置,只需删除 "de"。 - LCB
如果有超过一个单词需要用引号括起来,那么我的示例不太好。 - LCB
4
"dt"怎么样? - Max Coplan

3
保持光标在第一个引号中,按下d键,然后输入/" /e 它将删除双引号之间以及引号本身的内容。 这也适用于多行。
另一种方法: 将光标保持在第一个引号中,然后键入df" 它也会删除引号内和引号本身的文本!不适用于多行。
无论哪种方式,您都可以在正常模式下执行命令。

2
当这些引号之间存在另一个双引号时,这些方法将无法正常工作。 - SibiCoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接