从游标中删除到vim中括号(等)的末尾

时间:2011-08-24 23:59:08

标签: vim editor motion

说我在vim中有这行文字:

(foo bar (baz) qux)
    ^

,我的光标位于foobar之间的空格处。我经常发现,在这样的情况下,我想删除外部括号表达式的整个右侧(即光标右侧),同时保持左侧不变。也就是说,我想最终得到:

(foo)

通常情况下,我会使用dt)(“删除直到)”)完成此操作,但添加嵌套括号会使事情变得复杂:该命令会让我(foo) qux)。我也可以使用d2t),但我不想手动计算嵌套括号的数量。我也可以使用di),但会删除括号内的整个,只留下()

vim动作是否具有i- and a-modified motions的平衡感,但是相对于当前光标位置?

2 个答案:

答案 0 :(得分:14)

您可以将])动作与d一起使用。

d])

答案 1 :(得分:3)

mxF(%d`x

打破它:

mx

设置标记x(选择您喜欢的任何字母)

F(

查找上一个(字符

%

跳转到匹配)

d`x

从此处删除以标记x

适合您的具体情况;我不确定它有多普遍。如果之前的(不在当前行,请使用?(<return>而不是F(

修改
我没有提到d])因为我不知道它。

我的解决方案不适用于这种情况:

( (before) foo (after) )
              ^

因为它跳回到最近的(,而不是最近的封闭 (