有没有办法在Vim中设置文件的编辑范围,以便它适用于任何后续命令?我即将对函数进行一些重大的重构,我想将我的所有更改(在这种情况下为替换)限制为该函数。在过去,我只是将函数复制到一个新缓冲区,进行了更改并将其复制回主文件,但我希望有更聪明的方法。
我知道我可以在函数的开头和结尾设置一个标记,并使用替换命令范围的标记,我知道我可以使用可视模式选择行的范围,做一些事情,使用gv来重新选择然后执行下一个命令,但这两个方法都依赖于我记住在每个命令之前指定范围。
还有其他建议吗?
答案 0 :(得分:4)
这是折叠的一个很酷的技巧:
折叠整个功能。
执行替换:s/foo/bar/c<Enter>
,注意c
标记为“确认”,在Vim中进行重构时至关重要。替换将应用于折叠中的每一行。 AFAIK,您可以通过这种方式运行任何Ex命令,但除了:s
和:g
/ :v
之外,我从未使用过此技巧。
点击y/n
接受/拒绝每次替换。
在您接受/拒绝最后一次替换后,折叠立即返回到“关闭”状态:您不必为下一次替换键入范围。
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