我有一些非常有用的插件可以通过文件查找和替换文本(请参阅EasyGrep
vim脚本 - 这对程序员非常有帮助)。我甚至可以只在当前缓冲区中替换文本 - 使用插件或:%s ...
。但是如果我只想在当前函数体中替换文本呢?
考虑以下示例:
void f0()
{
int foo = 0;
// ...
}
// 99 other functions that uses foo as local variable.
void f100()
{
int foo = 0; // I want to replace foo with bar only in this function
// 1000 lines of code that uses foo goes below
// ...
}
当然,我可以使用带有:%s ...
标记的c
进行确认,但我相信有更快的方法可以做到这一点。
感谢。
答案 0 :(得分:14)
您可以使用%
或选择对整个文件应用替换。
创建选择:
以可视模式Linewise为例,使用Shift+v
,选择几行,然后输入:
。
您的提示将如下所示:
:'<,'>
表示:当前选择
然后输入s/foo/bar/g
,它将在当前选定的行中用bar替换foo。
选择函数内容的更好方法是使用游标进入函数并输入:
vi}
它会选择{
和}
之间的所有内容。
有关选择的更多提示,请参阅:help text-objects
。
答案 1 :(得分:5)
您可以使用V标记该功能。然后当您在:中键入命令时,它将自动加上前缀并且仅在标记区域中执行。
可能有一个跳转到函数开头和函数结束的命令,所以你可以很快地做开始函数,V,结束函数,替换。但不知道那些命令。
答案 2 :(得分:1)
我总是使用[[跳转到函数的开头,然后使用%跳转到函数的结尾。我使用 mt 和 mb 分别标记函数的顶部和底部。然后在标记的顶部和底部搜索并替换:&#39; t,/ pattern / newpattern / g 。这一直对我有用。我确定你可以为此创建一个宏。
视觉选择(vi)更容易,更快捷。它知道光标位置。因此,如果光标位于fucntion子块内,则vi}选择该块中的所有行。如果要选择整个函数,需要将光标放在子块之外,然后执行vi}。这适用于适合当前窗口的功能块。对于跨越当前窗口的函数,向上滚动后选择将丢失。
我非常喜欢vi}的视觉选择,因为它更容易和更快,但我不得不采用旧式的方法。