如何通过NerdTree和Vim为新建.h/.hpp文件自动插入头文件保护
实现NerdTree新建.h/.hpp时自动插入关联头文件保护
嘿,这个需求我之前也折腾过,刚好有个靠谱的实现方法——借助Vim的自动命令(autocmd)结合自定义函数就能搞定,具体步骤如下:
核心思路
NerdTree新建文件后,Vim会触发BufNewFile事件,我们可以监听这个事件,针对.h/.hpp文件自动生成和文件名绑定的头文件保护宏。
具体实现步骤
打开你的Vim配置文件(.vimrc,如果是Neovim就是init.vim/init.lua,这里以Vimscript为例),添加以下代码:
" 为.h/.hpp文件自动添加头文件保护 autocmd BufNewFile *.h,*.hpp call AddHeaderGuard() function! AddHeaderGuard() " 获取当前文件名(仅文件名,不含路径) let l:filename = expand('%:t') " 将文件名转大写,把.和-替换为_,生成符合规范的保护宏名 let l:guard_name = toupper( substitute(l:filename, '[.-]', '_', 'g') ) " 插入头文件保护的开头部分 call setline(1, "#ifndef " . l:guard_name) call append(1, "#define " . l:guard_name) call append(2, "") " 插入头文件保护的结尾部分 execute "normal! G" call append(line('$'), "") call append(line('$'), "#endif // " . l:guard_name) " 把光标定位到中间的空行,方便直接编写代码 execute "normal! 3G" endfunction
代码解释
autocmd BufNewFile *.h,*.hpp call AddHeaderGuard():告诉Vim,当新建.h或.hpp文件时,调用AddHeaderGuard函数。expand('%:t'):获取当前文件的纯文件名(比如新建utils.hpp,就得到utils.hpp)。toupper(substitute(...)):把文件名转成大写,同时把.和-替换成_,最终生成像UTILS_HPP、MY_CLASS_H这类符合C++规范的保护宏名。- 后续的
setline和append用来插入头文件保护的框架,最后调整光标位置,让你新建文件后直接就能写代码。
效果演示
用NerdTree新建文件时,比如按m调出菜单,选a创建新文件,输入my-module.h回车后,Vim会自动生成:
#ifndef MY_MODULE_H #define MY_MODULE_H // 这里可以直接编写你的头文件内容 #endif // MY_MODULE_H
自定义扩展
如果需要额外的内容(比如作者信息、命名空间),可以在函数里添加对应的append语句,比如:
call append(3, "// Author: Your Name") call append(4, "// Date: " . strftime("%Y-%m-%d")) call append(5, "") call append(6, "namespace MyProject {") call append(7, "")
这样新建文件时会自动带上这些内容,按需调整就行~
内容的提问来源于stack exchange,提问作者JerryThePineapple
相关产品推荐
相关产品推荐

