vim - 在vim中,如何查看我当前所在的#ifdef宏?

标签 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>     

谢谢。

最佳答案

我发现,在我的日常使用中,以下这些已经绰绰有余了

  • [#
  • ]#

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

  • % 在相同的 while 之间循环 on 条件 block 的预处理器指令行之一

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

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

我刚测试过

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

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

关于vim - 在vim中,如何查看我当前所在的#ifdef宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8601280/

相关文章:

vim - 将 vim 中的 grep 搜索限制为与当前文件具有相同扩展名的文件

linux - vim中的水平线

unix - 将 *nix 命令的结果通过管道传输到 Vim 的打开文件集中

c++ - C/C++ 宏中的逗号

c++ - #ifdef 不能正常工作?

c - "#if ..."(带有省略号)是做什么的?

vim - 为什么这个 .vimrc 映射在终端中不起作用(但它在 MacVim 中起作用): map <S-Enter> O<Esc>

unit-testing - 在宏上下文测试中使用 panic::catch_unwind 以解决单元测试中的 panic 问题

iphone - 如何在 Xcode 4 中定义预处理器宏?

基于参数值的 Verilog 条件硬件