Vim 具有两个搜索范围的全局命令,用于拉取多个部分
Vim global command with two search ranges to yank multiple sections
我想创建一个全局命令来提取多个文本部分:
:g/BEGIN/.,/END/yank A
我的想法是 assemble,在寄存器 A 中,文件中出现在标记 "BEGIN" 和 "END:"
之间的(多个)部分
BEGIN
Section 1
END
BEGIN
Section 2
END
不幸的是,这似乎在 VIM 上表现得有些混乱。有时全局似乎 select 多个部分(即它不会在它找到的第一个 "END" 处停止 selection,而是 select 到更远的一个,有时是一个单独的部分。同一文件的行数 select 似乎会根据不相关的编辑随机更改。
显然我做错了什么。是否有正确的语法 - 选择并拉出由标记划定的多个部分?我没有在网上找到太多来验证这种语法的东西——尽管有很多关于 ex 范围、搜索范围和全局范围的文档,但我从未见过像这样将这三者结合起来的情况。
在 Lieven 验证我的语法是正确的(它是)之后,我发现问题与我的文本中使用折叠有关。当我展开所有文本时,我得到了预期的行为。
当我折叠文本时,全局命令并不总能找到第一个 "END" 标记 - 有时它似乎会拉出整个文档。
这对我来说似乎是一个错误 - 为什么全局命令的第一个搜索词在存在折叠的情况下仍然有效,但第二个词却不起作用?但也许这是预期的行为。
下面是一些说明问题的示例文本:
{{{
BEGIN
111
END
}}}
{{{
BEGIN
222
END
}}}
展开时,命令 g/BEGIN/.,/END/yank A
找到正确的文本,折叠时,全局 returns 出错。
在我的场景中,"unfold the text" 是一个可行的解决方案,所以为了后代,我在这里发帖。
我想创建一个全局命令来提取多个文本部分:
:g/BEGIN/.,/END/yank A
我的想法是 assemble,在寄存器 A 中,文件中出现在标记 "BEGIN" 和 "END:"
之间的(多个)部分BEGIN
Section 1
END
BEGIN
Section 2
END
不幸的是,这似乎在 VIM 上表现得有些混乱。有时全局似乎 select 多个部分(即它不会在它找到的第一个 "END" 处停止 selection,而是 select 到更远的一个,有时是一个单独的部分。同一文件的行数 select 似乎会根据不相关的编辑随机更改。
显然我做错了什么。是否有正确的语法 - 选择并拉出由标记划定的多个部分?我没有在网上找到太多来验证这种语法的东西——尽管有很多关于 ex 范围、搜索范围和全局范围的文档,但我从未见过像这样将这三者结合起来的情况。
在 Lieven 验证我的语法是正确的(它是)之后,我发现问题与我的文本中使用折叠有关。当我展开所有文本时,我得到了预期的行为。
当我折叠文本时,全局命令并不总能找到第一个 "END" 标记 - 有时它似乎会拉出整个文档。
这对我来说似乎是一个错误 - 为什么全局命令的第一个搜索词在存在折叠的情况下仍然有效,但第二个词却不起作用?但也许这是预期的行为。
下面是一些说明问题的示例文本:
{{{
BEGIN
111
END
}}}
{{{
BEGIN
222
END
}}}
展开时,命令 g/BEGIN/.,/END/yank A
找到正确的文本,折叠时,全局 returns 出错。
在我的场景中,"unfold the text" 是一个可行的解决方案,所以为了后代,我在这里发帖。