在vim中,如何检查我目前在里面的#ifdef宏?

时间:2011-12-22 08:40:25

标签: vim macros conditional-compilation

我使用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>     

感谢。

2 个答案:

答案 0 :(得分:6)

我发现,在我的日常使用中,以下绰绰有余

  • [
  • ]

    在当前#if *条件块

  • 的分支之间来回导航
  • on on 条件块的预处理器指令行之间循环

我有时会发现自己添加了一个折叠附加组件:

  • [ ž ˚F
  • ZF
  • v ž ˚F

我刚刚在

上测试过它
#ifdef BLA
    #if BLO == 1
        #include <something>
    #else
        #pragma error "oops"
    #endif
#elifdef BLU
    #include <something_else>
#endif

嵌套条件之间没有混淆,也没有非条件指令。我还发现它不依赖于文件类型(或者 text 的文件类型插件也支持它):)

答案 1 :(得分:0)

我们可以使用“ctags --excmd = number”来生成标签文件。它会使用行号产生标签位置,因此将解决这个问题。