假设我在Vim中有这行文本:
(foo bar (baz) qux)
^
当光标位于单词 foo
和 bar
之间时,我经常发现在这种情况下,我希望删除外部括号表达式的整个右侧(也就是光标右侧),同时保留左侧。也就是说,最终需要得到:
(foo)
通常,我会使用
dt)
(“删除到)
”),但嵌套的括号使事情变得复杂:该命令将使我留下(foo) qux)
。我也可以使用d2t)
,但我不想手动计算嵌套括号的数量。我也可以使用di)
,但那会删除括号内的整个文本,让我只剩下()
。是否有一个 Vim 运动,具有
i
和a
修饰符修改运动的平衡感知能力,也与当前光标位置有关?
])
这个命令;这肯定比我的解决方案简单(但我的解决方案对于非 vim 版本的 vi 仍然有效)。 - Keith ThompsonF(
找到适当的(
进行跳转。我认为我更喜欢使用df)
并重复使用.
然后是a)
。或者使用mxF(
,然后使用,
重复F
运动,直到找到正确的(
,然后%d`x
。 - Peter Rincker((before) foo ^ (after))
。F(
或?(<return>
将找到在before
之前的左括号,而不是最靠近光标位置的括号。 (我记得很多年前有一个:set lisp
命令。我看到vim仍然有它。它是做什么的?是的,我应该阅读文档。) - Keith Thompsonset lisp
会改变一些缩进规则并允许-
作为关键字的一部分。 - Peter Rincker