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

Vim: How to delete to closing square bracket in nested block

我在 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 也不是好的选择,因为嵌套结构。

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

d/}]

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

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

/{pattern}/s-

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

:help search-offset

使用

vi]o``d

做这个把戏。

  • vi] 将 select 整个文本匹配 "]"
  • o 移动光标到匹配的开头"["
  • `` 将光标移动到最后一个位置
  • d删除selection

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