在Vim中设置编辑范围

时间:2012-05-02 13:49:49

标签: vim range

有没有办法在Vim中设置文件的编辑范围,以便它适用于任何后续命令?我即将对函数进行一些重大的重构,我想将我的所有更改(在这种情况下为替换)限制为该函数。在过去,我只是将函数复制到一个新缓冲区,进行了更改并将其复制回主文件,但我希望有更聪明的方法。

我知道我可以在函数的开头和结尾设置一个标记,并使用替换命令范围的标记,我知道我可以使用可视模式选择行的范围,做一些事情,使用gv来重新选择然后执行下一个命令,但这两个方法都依赖于我记住在每个命令之前指定范围。

还有其他建议吗?

3 个答案:

答案 0 :(得分:4)

这是折叠的一个很酷的技巧:

  1. 折叠整个功能。

  2. 执行替换:s/foo/bar/c<Enter>,注意c标记为“确认”,在Vim中进行重构时至关重要。替换将应用于折叠中的每一行。 AFAIK,您可以通过这种方式运行任何Ex命令,但除了:s:g / :v之外,我从未使用过此技巧。

  3. 点击y/n接受/拒绝每次替换。

  4. 在您接受/拒绝最后一次替换后,折叠立即返回到“关闭”状态:您不必为下一次替换键入范围。

  5. GOTO 2

答案 1 :(得分:0)

假设vim是使用+ textobjects编译的,您可以选择该函数作为块。所以也许你正在寻找:

va{:s/foo/bar

仅在当前{}括号内的函数中用bar替换foo。如果您的函数没有用大括号分隔,您可以根据一些语法规则编写一个函数来选择范围,但这可能足以满足您的需求。

答案 2 :(得分:0)

使用vim http://www.vim.org/scripts/script.php?script_id=3075的Narow Region插件将它们放在你的vim文件夹中并使用如下:

:[range]NR

请参阅此页:https://github.com/chrisbra/NrrwRgn