我有一个庞大的代码文件,并希望在每个函数中插入打印代码。
我知道调试是一个选项,但我是Kernel的新手,kgdb
不是一个简单而直接的选项,因此我想暂时使用printf。
我使用vim的multiple buffers
来更快地执行此任务,但想知道是否有任何方法可以在.vimrc
中自动执行此任务
这是最终代码必须是什么样的
void foo(int a, int b) {
printf("Some print");
// ...
}
int bar() {
printf("Some print");
// ...
}
void bleh(int b) {
printf("Some print");
// ...
}
答案 0 :(得分: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
这将为定位的c源代码文件中的每个函数添加print("someprint")
。如果要在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>
和<C-v><Esc>
希望这个帮助