我的表格
中有一些跟踪线M_TRACE(EV_TRACE_LEVEL_DEBUG, "some trace");
我想把它们转换成
M_TRACE(EV_TRACE_LEVEL_DEBUG, "%s: some trace", __FUNCTION__);
但是我已经有一些显示功能名称的痕迹。
要进行转换,我使用以下命令
:%g/M_TRACE/s/"\(.*\)"/"%s: \1", __FUNCTION__/c
,遗憾的是,在某些地方包含了多余的 FUNCTION 。
有没有更好的方法呢?
答案 0 :(得分:1)
您可以在一个命令中执行此操作:
:%g/M_TRACE/s/"\(.*\)"\(, __FUNCTION__\)\?/"%s: \1", __FUNCTION__/
如果它已经存在,它将替换“,__FUNCTION__
”,如果它不存在,它将简单地附加它。
答案 1 :(得分:0)
你可以尝试:
:%g/M_TRACE.*\");/s/"\(.*\)"/"%s: \1", __FUNCTION__/c
在字符串后面排除带有arg的行。
第二次尝试: 使用Vim的零宽度负面后视模式:
%g/M_TRACE.*\(__FUNCTION__\)\@<!);/s/"\(.*\)"/"%s: \1", __FUNCTION__/
那是M_TRACE
后跟); ,前面没有__FUNCTION__
答案 2 :(得分:0)
我会分两步完成:首先替换引号内的部分,然后将")
替换为", __FUNCTION__)
但是,如果你只想用一个命令来做:
:%g/M_TRACE/s/"\(.*\)".*/"%s: \1", __FUNCTION__);
答案 3 :(得分:0)
如果你有少(打),你可以使用i
nteractive模式进行交互式搜索/替换:
:%g/M_TRACE/s/"\(.*\)"/"%s: \1", __FUNCTION__/igc
然后单步执行它们。你去的时候回答你的问题。