Vim:更改/删除到"块"的结尾

sta*_*tti 17 vim editor

当您有一个用括号或引号分隔的文本块时,您可以使用

ci"
da(
Run Code Online (Sandbox Code Playgroud)

等等来改变那个文本块.但有没有办法从光标更改或删除到该块的结尾(cw对于单词的方式)?

Ben*_*oit 26

使用ct)以" correct t病右括号".

使用t,f,T和F的Vim运动非常非常有用.:help t,:help f.

更新:如果您有以下嵌套括号:

  • vi)o``将选择直到关闭括号(将在括号内选择,然后切换到选择的另一端并将其移动到您所在的位置(``)
  • vi)``将选择直到打开括号(相同的机制,但不需要o)

第一个工作原理仅仅是因为当您正在进行vi)光标跳转时会记住,并``转到上一个光标位置.似乎o在视觉模式下不会影响这一点.

  • 一个细节:与原始问题略有不同,我猜,因为这将适用于紧接的下一个右括号,而`vi(`例如将寻找匹配的一个.例如,输入`vi(`on on on `(text(more))`中的`x`也会选择`(more)`,而输入'vt)`将无法选择第一个右括号. (2认同)

Gre*_*ton 14

使用Benoit的答案t f TF是我知道的最好的方式.当删除到带括号的块的末尾时,您可以使用]).这将考虑任何嵌套的括号.还有一个相应的[(,]}[{.

  • 有没有办法删除结束`]`(考虑嵌套的`[]`)?d]]似乎不起作用 (3认同)
  • 这些动议如何称呼?我想在 vim 手册中阅读有关它们的内容。 (2认同)
  • 没有太多的东西可以阅读我害怕,但你可以找到它们:`help [(`. (2认同)

Tim*_*gan 6

请参阅Vim帮助的" 文本对象选择 "部分.您可以使用删除和更改操作在那里定义选择序列.它显示了如何选择由以下任何一个(以及更多)分隔的块:

  • {}
  • ()
  • 行情(' or ")

例如:

d}c}会删除从光标更改为段落的末尾.