如何在~/project目录下新建C++文件时自动插入带日期的代码模板?
嘿,我来帮你搞定这个Vim自动插入代码模板的需求!要实现仅在~/project及其子目录下新建C++文件时插入模板,我们需要从「目录校验」和「模板逻辑修复」两方面入手,具体方案如下:
一、修改自动命令,添加目录过滤条件
原来的自动命令只匹配文件后缀,我们需要给它加上路径校验,确保只有目标目录下的新建文件才会触发模板。
把你原来的autocmd替换成下面这段,放到~/.vimrc或者Vim的配置文件里:
autocmd BufNewFile *.cc,*.cpp,*.h if strstart(expand('%:p'), expand('~/project')) | source ~/.vim/ftplugin/template.vim | endif
这段命令的作用拆解:
expand('%:p'):获取当前新建文件的绝对路径,避免相对路径的判断误差expand('~/project'):把~展开成你的Home目录绝对路径,确保路径匹配准确strstart():检查文件路径是否以~/project开头,这样就覆盖了该目录下的所有子目录- 只有条件满足时,才会执行
source加载模板文件,完美限定了触发范围
二、修复模板文件的日期插入逻辑
你原来的模板里日期插入的写法有问题,execute不会返回命令输出,我们改用system()函数来获取date命令的结果,同时处理掉多余的换行符。
修改~/.vim/ftplugin/template.vim的内容为:
" 初始化文件内容(新建文件为空,这步是保险操作) call setline(1, '') " 逐行插入模板头部 call setline(1, '/*') call setline(2, ' * Author : Name') " 获取系统日期并去除末尾换行 let date_output = substitute(system('date'), '\n$', '', '') call setline(3, ' * Date : ' . date_output) call setline(4, ' */') " 自动把光标定位到Author后面,方便直接修改名字 call cursor(2, 12)
关键修复点:
system('date'):执行系统的date命令并返回输出字符串(默认带末尾换行)substitute(..., '\n$', '', ''):去掉字符串最后的换行符,避免模板里出现多余空行cursor(2,12):自动把光标移到第二行Author :的后面,不用手动移动光标,提升新建文件的效率
三、额外优化小技巧
- 如果想让Author自动填充你的用户名,可以把第二行改成:
或者直接写死你的名字,比如call setline(2, ' * Author : ' . substitute(system('whoami'), '\n$', '', ''))' * Author : Yedhin' - 确保模板文件的权限正确,执行
chmod 644 ~/.vim/ftplugin/template.vim即可 - 可以把autocmd放到
~/.vim/plugin/template_autocmd.vim这样的单独文件里,方便管理配置
内容的提问来源于stack exchange,提问作者Yedhin
相关产品推荐
相关产品推荐

