说我在vim中有这行文字:
(foo bar (baz) qux)
^
,我的光标位于foo
和bar
之间的空格处。我经常发现,在这样的情况下,我想删除外部括号表达式的整个右侧(即光标右侧),同时保持左侧不变。也就是说,我想最终得到:
(foo)
通常情况下,我会使用dt)
(“删除直到)
”)完成此操作,但添加嵌套括号会使事情变得复杂:该命令会让我(foo) qux)
。我也可以使用d2t)
,但我不想手动计算嵌套括号的数量。我也可以使用di)
,但会删除括号内的整个,只留下()
。
vim动作是否具有i
- and a
-modified motions的平衡感,但是相对于当前光标位置?
答案 0 :(得分:14)
您可以将])
动作与d
一起使用。
d])
答案 1 :(得分:3)
mxF(%d`x
打破它:
mx
设置标记x
(选择您喜欢的任何字母)
F(
查找上一个(
字符
%
跳转到匹配)
d`x
从此处删除以标记x
适合您的具体情况;我不确定它有多普遍。如果之前的(
不在当前行,请使用?(<return>
而不是F(
。
修改强>:
我没有提到d])
因为我不知道它。
我的解决方案不适用于这种情况:
( (before) foo (after) )
^
因为它跳回到最近的(
,而不是最近的封闭 (
。