带有两个搜索范围的Vim全局命令可以划分多个部分

时间:2015-02-17 05:07:37

标签: vim

我想创建一个全局命令来抽取多个文本部分:

:g/BEGIN/.,/END/yank A

我的想法是,我会在寄存器A中汇编文件中的(多个)部分,这些部分出现在标记“BEGIN”和“END:”之间

BEGIN
Section 1
END

BEGIN
Section 2
END

不幸的是,这似乎在VIM上有些混乱。有时全局似乎选择了多个部分(即它不会在它找到的第一个“END”处停止选择,而是选择更远的一个,有时是一个部分。由同一个全局选择的行数似乎根据不相关的编辑,稍微随机地更改同一文件。

显然我做错了什么。是否有正确的语法 - 选择并覆盖由标记描绘的多个部分?我没有找到很多在线验证这种语法 - 尽管ex范围,搜索范围以及全局变量的范围都有很多文档,我从来没有见过这三种组合这样的。

1 个答案:

答案 0 :(得分:2)

在Lieven确认我的语法是正确的(确实如此)后,我发现问题与我文本中使用折叠有关。当我展开所有文本时,我得到了预期的行为。

当我折叠文字时,全局命令并不总能找到第一个" END"标记 - 有时它似乎会拉动整个文档。

这对我来说似乎是一个错误 - 尽管存在折叠,为什么全局命令的第一个搜索词会起作用,但第二个术语不起作用?但也许这是预期的行为。

以下是一些显示问题的示例文本:

 {{{
 BEGIN
 111
 END
 }}}
 {{{
 BEGIN
 222
 END
 }}}

展开时,命令g/BEGIN/.,/END/yank A找到正确的文本,折叠后,全局会返回错误。

在我的场景中,"展开文字"是一个可行的解决方案,所以我为了后代而在这里发帖。