Vim:如何删除嵌套块中的右方括号

时间:2021-04-23 14:05:13

标签: vim

我在 Python 中有一个很长的嵌套列表:

[{'name': 'John', 'args': [[1], [165], [22]]},
{'name': 'Tom', 'args': [[2], [180], [28]]},
...
{'name': 'James', 'args': [[143], [174], [45]]}, # Delete from here on
...
{'name': 'Ron', 'args': [[298], [199], [38]]}]

并希望从中间的某处删除直到结束括号。如果我有一个类似的带有圆括号或大括号的嵌套块,我可以使用 d])d]}。这按预期工作,但 d]] 不是。不幸的是,由于嵌套结构,f, t 也不是好的选择。

2 个答案:

答案 0 :(得分:2)

在这种特殊情况下,您可以:

d/}]

(并按回车键)删除直到搜索模式:}]

一般来说,当我无法快速看到内置的运动/文本对象情况时,使用搜索作为运动是我的首选。您甚至可以使用 {pattern}/{offset} 功能复制 f/t 区别。例如

/{pattern}/s-

将光标移动到 {pattern} 开始之前。

:help search-offset

答案 1 :(得分:2)

使用

vi]o``d

做的伎俩。

  • vi] 将选择匹配“]”内的整个文本
  • o 将光标移动到匹配“[”的开头
  • `` 移动光标到最后位置
  • d 删除选择

归功于Benoit's answer of Vim: changing/deleting up to the end of a “block”