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

Mah*_*esh 1 vim macros conditional-compilation

我使用vim/cscope/ctags来浏览C源代码.很多次我发现使用#ifdefs 定义宏是两次甚至更多次,我正在查看我不想要的定义.

所以我的问题是,在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>     
Run Code Online (Sandbox Code Playgroud)

谢谢.

seh*_*ehe 8

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

  • [#
  • ]#

    在当前#if*条件块的分支之间来回导航

  • %到相同的同时之间循环的条件块的预处理器指令线中的一个

我有时发现自己添加了一个折叠addhoc:

  • [#zf%
  • zf%
  • v%%zf

我刚试过它

#ifdef BLA
    #if BLO == 1
        #include <something>
    #else
        #pragma error "oops"
    #endif
#elifdef BLU
    #include <something_else>
#endif
Run Code Online (Sandbox Code Playgroud)

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

  • 辉煌!应该是公认的答案。 (2认同)