2

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

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

还有其他建议吗?

4

3 回答 3

4

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

  1. 折叠你的整个功能。

  2. 执行替换,:s/foo/bar/c<Enter>注意c“确认”标志,这在 Vim 中进行重构时至关重要。替换将应用于折叠中的每一。AFAIK,您可以以这种方式运行任何 Ex 命令,但我从未将这个技巧与其他任何东西一起使用:s:g/ :v

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

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

  5. GOTO 2

于 2012-05-02T15:53:59.563 回答
0

使用 vim http://www.vim.org/scripts/script.php?script_id=3075的 Narow Region Plugin将它们放在您的 vim 文件夹中并像这样使用:

:[range]NR

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

于 2012-05-04T13:23:07.377 回答
0

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

va{:s/foo/bar

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

于 2012-05-02T14:04:38.423 回答