如何在VIM中使用长文件限制工作范围

时间:2018-02-13 19:14:42

标签: vim

有时我发现我需要编辑具有大量冗余的长文件。当我通过搜索导航时,我不可避免地最终会出现在我不想进入的文件的一部分中,因为它具有匹配的搜索结果。 (想象一个包含许多记录的长xml文件,每个记录都有相同的标记集。)

我通常的方法是将我感兴趣的部分复制到另一个文件,在那里编辑,然后将其重新组合成原始文件。

我想知道VIM是否有办法临时定义工作范围,以便所有搜索甚至滚动都限制在该范围内,直到范围被禁用。

3 个答案:

答案 0 :(得分:0)

我会推荐Narrow Region Plugin。它会打开一个包含所选范围的新窗口,在执行更改并保存后会将该内容返回到您的文件中。

答案 1 :(得分:-1)

Vim的帮助文档引用了搜索功能的stopline参数。

  

搜索({pattern} [,{flags} [,{stopline} [,{timeout}]]])

     

[...]

     

当给出{stopline}参数时,搜索停止                   搜索完这一行后。这有助于限制                   搜索一系列行。例子:

     

让match = search('(',' b',line(" w0"))

     

让结束=搜索('结束','',行(" w $"))

     

当使用{stopline}并且它不为零时,这也意味着   搜索没有环绕文件的末尾。   零值等于不给出参数。

答案 2 :(得分:-1)

可以定义如下命令以简化范围内的搜索:

command! -nargs=* Rs let a=split(<q-args>) | silent! exe '/\%>'.a[0].'l\%<'.a[1].'l\('.a[2].'\)'

在(第4到第10行)之间搜索单词xml

:Rs 4 10 xml

这甚至承认正则表达式,例如在第4到10行之间寻找foobar

:Rs 4 10 foo\|bar

与等效的搜索命令相比,这节省了一些输入:

\%>4l\%<10l\(foo\|bar\)