我交出了一些遗留代码,首先我要改变
(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)
但它不起作用.请指教.
试试这个:
:%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)
解释正则表达式
(\(.*\))- 匹配内部的任何内容()并捕获它
\([^ ]*\)- 然后是任何不是空格的东西并捕获它