我使用vim / cscope / ctags浏览C源代码。很多次我发现定义宏是使用#ifdef
的两倍甚至更多次,我正在查看我不想要的定义。
所以我的问题是,在vim中是否有任何快捷方式,如果我正在查看的行位于#ifdef
宏内,我可以找到它?
我可以使用:tselect
获取所有定义的列表,但我正在寻找一些快捷方式,例如我用来查找我所在功能的那个(下面的示例)。
" Show function name
fun! ShowFuncName()
let lnum = line(".")
let col = col(".")
echohl ModeMsg
echo getline(search("^[^ \t#/]\\{2}.*[^:]\s*$", 'bW'))
echohl None
call search("\\%" . lnum . "l" . "\\%" . col . "c")
endfun
map f :call ShowFuncName() <CR>
感谢。
答案 0 :(得分:6)
我发现,在我的日常使用中,以下绰绰有余
] #
在当前#if *条件块
%在 on on 条件块的预处理器指令行之间循环
我有时会发现自己添加了一个折叠附加组件:
我刚刚在
上测试过它#ifdef BLA
#if BLO == 1
#include <something>
#else
#pragma error "oops"
#endif
#elifdef BLU
#include <something_else>
#endif
嵌套条件之间没有混淆,也没有非条件指令。我还发现它不依赖于文件类型(或者 text 的文件类型插件也支持它):)
答案 1 :(得分:0)
我们可以使用“ctags --excmd = number”来生成标签文件。它会使用行号产生标签位置,因此将解决这个问题。