Vim:替换函数体内的文本

mav*_*rik 5 vim replace

我有一些非常有用的插件可以通过文件查找和替换文本(请参阅EasyGrepvim脚本 - 这对程序员非常有帮助).我甚至可以只在当前缓冲区中替换文本 - 使用插件或:%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
     // ...
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以使用:%s ...具有c标志进行确认,但我相信有一个更快的方法来做到这一点.

谢谢.

Xav*_* T. 13

您可以使用%或在选择上将替换应用于整个文件.

要创建选择:

以Visualwise的可视模式进行,例如Shift+v,选择几行,然后键入:.

您的提示将如下所示: :'<,'>它表示:当前选择

然后输入s/foo/bar/g,它将在当前选定的行中用bar替换foo.

选择函数内容的更好方法是使用光标进入函数并键入: vi}它将选择{和之间的所有内容}.

有关:help text-objects选择的更多提示,请参阅.

  • 谢谢你的`vi}.这真的很有用.但是当函数内部存在块`{...}`时,`vi}`会被调用:( (2认同)

小智 6

您可以用V标记该函数。然后在:中键入命令时,它将自动添加前缀,并且仅在标记的区域中执行。

可能会有一个跳转到功能开始和功能结束的命令,因此您可以非常快速地执行开始功能,V,结束功能。但是不知道那些命令。