如何将C样式转换为在vim中转换为C++样式

use*_*089 8 c++ vim

我交出了一些遗留代码,首先我要改变

(int)a + b;
Run Code Online (Sandbox Code Playgroud)

成

static_cast<int>(a) + b;
Run Code Online (Sandbox Code Playgroud)

它们中有很多并且手动完成它们非常耗时.有没有办法使用vim来实现这一目标?

我试过类似的东西

:%s/\(int\).* /static_cast<int>(\2)/g
Run Code Online (Sandbox Code Playgroud)

但它不起作用.请指教.

xk0*_*der 6

试试这个:

:%s/(\(.*\))\([^ ]*\)/static_cast<\1>(\2)/g
Run Code Online (Sandbox Code Playgroud)

根据您的问题,这个正则表达式假定变量名后面会有一个空格:

示例:
对于以下测试数据:

(int)a + b
(float)x * y
(int)z+m
Run Code Online (Sandbox Code Playgroud)

结果将是

static_cast<int>(a) + b
static_cast<float>(x) * y
static_cast<int>(z+m)
Run Code Online (Sandbox Code Playgroud)

解释正则表达式

(\(.*\))- 匹配内部的任何内容()并捕获它
\([^ ]*\)- 然后是任何不是空格的东西并捕获它