有时我发现我需要编辑具有大量冗余的长文件。当我通过搜索导航时,我不可避免地最终会出现在我不想进入的文件的一部分中,因为它具有匹配的搜索结果。 (想象一个包含许多记录的长xml文件,每个记录都有相同的标记集。)
我通常的方法是将我感兴趣的部分复制到另一个文件,在那里编辑,然后将其重新组合成原始文件。
我想知道VIM是否有办法临时定义工作范围,以便所有搜索甚至滚动都限制在该范围内,直到范围被禁用。
答案 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行之间寻找foo
或bar
:
:Rs 4 10 foo\|bar
与等效的搜索命令相比,这节省了一些输入:
\%>4l\%<10l\(foo\|bar\)