【问题标题】:Insert header guards in .h and .hpp files via nerdtree and vim通过 nerdtree 和 vim 在 .h 和 .hpp 文件中插入标头保护
【发布时间】:2020-10-30 11:31:42
【问题描述】:

假设我想为 .h 和 .hpp 文件添加标头保护。标头保护的名称必须取决于文件的名称。每次通过 nerdtree 创建 .h 和 .hpp 文件时,如何插入这些标头保护?

【问题讨论】:

  • name of the header guards must depend on the name of the file 如果你有 dir1/header.h 和 dir2/header.h 怎么办?
  • 只使用标题

标签: c++ vim nerdtree


【解决方案1】:

典型的方法是使用模板扩展插件。这就是我对 mu-template 所做的事情——它甚至支持包含保护的命名策略,可以在不同的项目中以不同方式覆盖。

也可以通过监听 BufNewFile 事件然后手动扩展包含防护来手动完成(例如,请参阅 perreal 的答案)。

PS:NerdTree 与问题无关,也与解决方案无关。

【讨论】:

    【解决方案2】:

    这可以让你开始:

    function Cpp_print_header()                                          
      let header_guard_name = toupper(expand('%:t:gs/[^0-9a-zA-Z_]/_/g'))
      let str_header_guard = ["#ifndef " . header_guard_name,            
        \"#define " . header_guard_name,                                 
        \"",                                                             
        \"#endif /* " . header_guard_name . " */"]                       
      call setline(line("$"), str_header_guard)                          
                                                                         
    endfunction                                                          
                                                                         
    command CppPrintHeader :call Cpp_print_header()                      
    autocmd BufNewFile *.h,*.hpp :CppPrintHeader
    

    【讨论】:

    • 最好将autocmd放在一个组中(避免函数污染全局命名空间;`s:`函数在这里完美)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2015-01-24
    • 2011-02-15
    相关资源
    最近更新 更多