You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在~/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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:42:29