【发布时间】:2011-11-16 13:30:27
【问题描述】:
当你有一个用括号或引号分隔的文本块时,你可以使用
ci"
da(
等等以更改该文本块。但是有没有办法从光标更改或删除到该块的末尾(就像cw 为文字所做的那样)?
【问题讨论】:
-
“块”文本是指一个段落吗?
-
不,我的意思是用引号、括号、大括号、花括号等分隔的东西。我不知道它通常叫什么。
当你有一个用括号或引号分隔的文本块时,你可以使用
ci"
da(
等等以更改该文本块。但是有没有办法从光标更改或删除到该块的末尾(就像cw 为文字所做的那样)?
【问题讨论】:
使用ct) 来“c更正t右括号”。
带有 t、f、T 和 F 的 Vim 运动非常非常有用。 :help t, :help f.
更新:如果您所在的位置有嵌套括号:
vi)o`` 将选择直到右括号(将选择括号内,然后切换到选择的另一端并将其移动到您所在的位置(``)vi)`` 将选择直到左括号(相同的机制,但不需要o)第一个有效,因为当您执行vi) 时,会记住光标跳转,而`` 会转到上一个光标位置。看来o在可视模式下不影响这个。
【讨论】:
vi( 例如会寻找匹配的那个。例如,在(text (more)) 中的x 上键入vi( 也会选择(more),而键入vt) 将无法选择第一个右括号。
vf) 选择 xt (more)。 v2t) 会做同样的事情,但我的口味需要太多的计数和打字。
vimtutor 中找不到这些非常有用的命令和动作。
Benoit 使用t f T 和F 的答案是我所知道的最好的方法。当涉及到删除到带括号的块的末尾时,您可以使用])。这将考虑任何嵌套括号。还有对应的[(、]}和[{。
【讨论】:
:help [( 找到它们。
d]} 完全符合我的要求(从光标处删除到块的末尾)。
](考虑到嵌套的[])? d]] 似乎不起作用
参见 Vim 帮助的“Text object selection”部分。您可以在此处使用删除和更改操作定义选择序列。它展示了如何选择由以下任何一个(以及更多)分隔的块:
{}()' or ")例如:
d} 和c} 将从光标处删除并更改为段落末尾。
【讨论】:
我不知道有一种通用的方法来做你想做的事,但是,假设你在k in:
The (quick (brown) fox) jumps over the lazy dog.
v2t) 会选择:
(The quick (brown) fox) jumps over the lazy dog.
^^^^^^^^^^^^^
如果您不想计算,可以链接t) 以扩大您的选择范围:vt)t) 将首先选择:
(The quick (brown) fox) jumps over the lazy dog.
^^^^^^^^
然后:
(The quick (brown) fox) jumps over the lazy dog.
^^^^^^^^^^^^^
vT( 会选择:
(The quick (brown) fox) jumps over the lazy dog.
^^^^^^^^^
【讨论】:
vi)、v]) 和v[(。定义如下: 1. vi) - select in ) 块。 2. v]) - 选择直到 ) 块结束。 3. v[( - 选择直到 ( 块开始。