17

假设我在 Vim 中有这行文本:

(foo bar (baz) qux)
    ^

foo如图所示,我的光标位于单词and之间的空格上bar。我经常发现,在这种情况下,我想删除外部括号表达式的整个右侧(即光标右侧),同时保持左侧完整。也就是说,我想结束:

(foo)

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

是否存在具有平衡意识的 Vim 运动i- 和 -a修改的运动也与当前光标位置相关?

4

2 回答 2

15

您可以使用])带有 的动作d

d])
于 2011-08-25T00:07:53.380 回答
3
mxF(%d`x

分解它:

mx

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

F(

查找上一个(字符

%

跳转到匹配)

d`x

从这里删除以标记x

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

编辑
我没有提到d]),因为我不知道。

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

( (before) foo (after) )
              ^

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

于 2011-08-25T00:07:55.470 回答