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

我使用 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 的文件类型插件也支持它:))

https://stackoverflow.com/questions/8601280/

相关文章:

c# - 如何判断对象初始化程序何时完成

php - php preg匹配中的 "*"和 "?"有什么区别?

sql - 如何从 SQL Server 获取数据库列表?

ruby-on-rails - Errno::ETIMEDOUT:连接超时 - connect(2)

erlang - 在没有列表到字符串翻译的情况下格式化 Erlang 术语

visual-c++ - 为什么没有定义 PCTSTR 但定义了 LPCTSTR?

logging - 如何在 Glassfish 中设置日志记录级别?

objective-c - Xcode - 将 CGRect 转换为 ID?

bash - 在 bash 中,如何在键入命令行时扩展 !$?

visual-c++ - 错误 C2664 : 'sprintf' : cannot convert