1

我有一个巨大的代码文件,想在每个函数中插入打印代码。我知道调试是一种选择,但我是内核新手,kgdb不是一个简单直接的选择,因此我想暂时使用 printf。

我使用 vimmultiple buffers来更快地完成这项任务,但想知道是否有任何方法可以将其自动化.vimrc 这是最终代码的样子

void foo(int a, int b) {
    printf("Some print");
    // ...
}

int bar() {
    printf("Some print");

    // ...
}

void bleh(int b) {
    printf("Some print");
    // ...
}
4

1 回答 1

2

一种快速的方法是在 shell 中:

find -name '*.c' | xargs vim

在 vim 中,您使用宏开始录制qq,使用全局命令

:g/\v\s*(void|int) \w+\([^)]*\)/normal A^Mprint("some print");

然后你使用美妙的argdo命令:

:argdo normal @q

要保存您使用的更改:

:argdo normal :w^M

这将添加print("someprint")到找到的 c 源代码文件上的每个函数。如果要在print语句中使用函数名或文件名,可以使用带有一些复杂替换的全局命令,例如(未测试):

:global /\v\s*(void|int) \w+([^)]*)/s/\v(\w+)\([^]]*\)\s* {/\=submatch(0) . '\r\t\tprint(in file.function:'. expand('%') .'.'. submatch(1) . ');'

请记住 ^M 和 ^[ 不是文字字符串,它们是用<C-v><CR>and插入的<C-v><Esc>

希望这有帮助

于 2013-09-05T18:02:53.517 回答