1

您将如何使用 VIM 删除包含空白字符的单词组,但这是您在编写脚本时想要访问的标准分组?具体来说,当您将光标悬停在以下文本的某些部分上时,如何help="initialize, lines, h2, derivs, tt, history",从下面删除。也许需要创建特定的映射。但另一方面,如果您使用 VIM 编辑脚本程序,想要访问这样的文本似乎很自然。

parser = argparse.ArgumentParser()
parser.add_argument("task", help="initialize, lines, h2, derivs, tt, history", default='yes')
4

3 回答 3

1

从 Vim 的角度来看,根据其设计目标,有意义的是提供小而通用的元素和一些规则来组合它们以实现更高级别的任务。我想说,它的工作非常好,它有大量的文本对象和动作,但我们总是必须重复特定领域的任务,而这正是 Vim 的可扩展性发挥作用的地方。这是用户和插件作者用自定义映射/对象/函数和......插件填补空白的地方。

例如,录制宏并将其映射以供以后重用是相当容易的。或者创建一个快速而肮脏的自定义文本对象……</p>

以下代码段应适用于您的示例。

xnoremap aa /\v["'][,)]/e<CR>o?\v\s+\w+\=<CR>
onoremap aa :normal vaa<CR>

有了它,您可以在参数中的任何位置执行daacaa和。yaavaa

显然,这个解决方案非常具体,让它更通用肯定会涉及更多的思考,但已经有相对聪明的解决方案在浮动,就像 Ingo 的回答一样。

于 2013-09-02T19:26:06.263 回答
1

Vim 内置了多种文本对象,例如da"删除引用的文本(包括引号;di"保留引号)。有关:help text-objects更多信息,请参阅。

有一些插件,例如textobj-user - 支持用户定义的文本对象和我自己的CountJump 插件,可以轻松定义您自己的“特殊”文本对象。此外,您会在vim.org上找到许多这样的文本对象。根据您的示例,argtextobj.vim - 类似文本对象的参数运动可能正是您在这里所需要的。

于 2013-09-02T16:00:13.637 回答
1

如果您在"要删除的内部,我会使用:

di"diW

如果你在上面help=,我会使用类似的东西:

d/defEnter

删除所有内容,直到遇到default,然后是几个x,然后向左移动,以删除剩余的字符。

我真的不认为需要新的映射,但您的经验可能会有所不同。

于 2013-09-02T15:50:56.753 回答