VIM搜索并替换命令以查找方法字符串的);
- 结尾,并替换为以strlcpy
函数开头的行的附加参数。
输入
strlcpy(p->account,gettoken(NULL,&plast)); //Set Account Information
strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0')); /* YYYYMMDD */
strlcpy(p->status,gettoken(NULL,&plast));
预期输出(复制第一个参数,即p->account
,并将);
替换为sizeof(p->account));
strlcpy(p->account,gettoken(NULL,&plast),sizeof(p->account)); //Set Account Information
strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0'),sizeof(p->startDate)); /* YYYYMMDD */
strlcpy(p->status,gettoken(NULL,&plast),sizeof(p->status));
EG。以下命令搜索并替换);
:g/strlcpy(/s/);/,sizeof());/g
与
strlcpy(p->balance,getInfo(NULL,&account),sizeof());
如何将p->balance
作为参数传递给sizeof()
?
感谢最早的回复。
答案 0 :(得分:1)
<强>输入:强>
strlcpy(p->account,gettoken(NULL,&plast)); //Set Account Information
strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0')); /* YYYYMMDD */
strlcpy(p->status,gettoken(NULL,&plast));
<强>命令:强>
:%s/\(strlcpy(p->\)\([0-9A-Za-z]*\)\(\,.*))\)/\1\2\3,sizeof(p->\2))/g
<强>输出:强>
strlcpy(p->account,gettoken(NULL,&plast)),sizeof(p->account)); //Set Account Information
strlcpy(p->startDate,skipchr(gettoken(NULL,&plast),'0')),sizeof(p->startDate)); /* YYYYMMDD */
strlcpy(p->status,gettoken(NULL,&plast)),sizeof(p->status));
注意:强>
命令在vim内部运行!
答案 1 :(得分:1)
:%s/strlcpy(\(.\{-}\),.*\zs);/, sizeof(\1));
以下是分解的内容:
%
s
替换/
启动搜索模式strlcpy(
匹配strlcpy(
\(
启动匹配组以捕获稍后要使用的内容.\{-}
使用非贪婪乘数\{-}
匹配所有字符\)
完成比赛组,
强制匹配逗号。结合非贪婪的\{-}
,这具有选择直到第一个逗号.*
匹配所有字符\zs
在此之后开始替换);
匹配);
/
启动命令的替换部分, sizeof(
在\zs
之后使用, sizeof(
\1
使用替换));
使用));