Vim:在指定行上运行Ex命令,忽略折叠

Vim:在指定行上运行Ex命令,忽略折叠,vim,folding,ex,Vim,Folding,Ex,当在Vim的行范围内运行Ex命令时,该范围始终扩展到覆盖相邻的折叠(见:help fold behavior)。例如,给定以下文件: int foo() { foobar(); } :2s/o//n命令(即在第二行计算o)将打印: 2 matches on 1 line 但是,如果我折叠整个文件,我会得到: 4 matches on 2 lines 是否有任何方法可以覆盖/解决此行为?我想在精确指定的行范围内运行命令;我不在乎折叠。我发现我可以使用foldclosed和foldclos

当在Vim的行范围内运行Ex命令时,该范围始终扩展到覆盖相邻的折叠(见
:help fold behavior
)。例如,给定以下文件:

int foo() {
  foobar();
}
:2s/o//n
命令(即在第二行计算o)将打印:

2 matches on 1 line
但是,如果我折叠整个文件,我会得到:

4 matches on 2 lines

是否有任何方法可以覆盖/解决此行为?我想在精确指定的行范围内运行命令;我不在乎折叠。

我发现我可以使用
foldclosed
foldclosedend
方法检查特定行是否折叠。这至少可以检测出有问题的情况。如果其他一切都失败了:禁用折叠,做你的事情,重新启用折叠。@SatoKatsura:谢谢,我刚刚试过,效果非常好。我很惊讶所有的褶皱都能在这样的手术中存活下来。你知道还有什么需要注意的吗(例如,这种切换的任何副作用)?据我所知,没有副作用。这种切换的问题在于它涉及到屏幕刷新,对于一个简单的regexp匹配来说,这是非常昂贵的。我成功地使用了你的想法。请将您的评论转换为答案,以便我可以接受。我发现我可以使用
foldclosed
foldclosedend
方法检查特定行是否折叠。这至少可以检测出有问题的情况。如果其他一切都失败了:禁用折叠,做你的事情,重新启用折叠。@SatoKatsura:谢谢,我刚刚试过,效果非常好。我很惊讶所有的褶皱都能在这样的手术中存活下来。你知道还有什么需要注意的吗(例如,这种切换的任何副作用)?据我所知,没有副作用。这种切换的问题在于它涉及到屏幕刷新,对于一个简单的regexp匹配来说,这是非常昂贵的。我成功地使用了你的想法。请把你的评论变成一个答案,这样我就可以接受了。