vim配置——新建.c/.cpp/.h时自动插入文件头

需求

在我们编写C/C++代码时,我们希望VIM可以帮助我们

  • 插入文件整体开头注释,标注时间,作者等信息
  • 插入常用的库文件的#include头

那么这篇文章帮助你在你的vimrc中配置满足你自己需要的文件头自动插入功能!

配置

autocmd BufNewFile *h,*.cpp,*.c,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
	if expand("%:e") == 'sh'
		call setline(1,"\#########################################################################") 
		call append(line("."), "\# File Name: ".expand("%")) 
		call append(line(".")+1, "\# Author: angelavor") 
		call append(line(".")+2, "\# mail: 2461677579@qq.com") 
		call append(line(".")+3, "\# Created Time: ".strftime("%c")) 
		call append(line(".")+4, "\#########################################################################") 
		call append(line(".")+5, "\#!/bin/bash") 
		call append(line(".")+6, "")
	else
		call setline(1, "/*************************************************************************") 
		call append(line("."), "    > File Name: ".expand("%")) 
		call append(line(".")+1, "    > Author: angelavor") 
		call append(line(".")+2, "    > Mail: 2461677579@qq.com ") 
		call append(line(".")+3, "    > Created Time: ".strftime("%c")) 
		call append(line(".")+4, " ************************************************************************/") 
		call append(line(".")+5, "")
	endif
	if expand("%:e") == 'h'
		call append(line(".")+6,"#ifndef ".toupper(expand("%:r"))."_H")
		call append(line(".")+7,"#define ".toupper(expand("%:r"))."_H")
		call append(line(".")+8,"")
		call append(line(".")+9,"#endif")
	elseif expand("%:e") == 'cpp'
       call append(line(".")+6, "#include <iostream>")
       call append(line(".")+7, "#include <cstdio>")
       call append(line(".")+8, "#include <cstdlib>")
       call append(line(".")+9, "#include <queue>")
       call append(line(".")+10, "#include <stack>")
       call append(line(".")+11, "#include <algorithm>")
       call append(line(".")+12, "#include <string>")
       call append(line(".")+13, "#include <map>")
       call append(line(".")+14, "#include <set>")
       call append(line(".")+15, "#include <vector>")
       call append(line(".")+16, "using namespace std;")
       call append(line(".")+17, "")
   elseif expand("%:e") == 'c'
       call append(line(".")+6, "#include<stdio.h>")
       call append(line(".")+7, "#include<math.h>")
       call append(line(".")+8, "#include<string.h>")
       call append(line(".")+9, "")
    endif
	" 新建文件后自动定位到文件末尾
	autocmd BufNewFile * normal G
endfunc

你可以通过修改 BufNewFile 后的文件通配来指定你想要为哪些文件进行自动文件头插入,例如我这里仅会对 *h,*.cpp,*.c,*.sh,*.java 这些文件启用 SetTitle

使用文件后缀而不是filetype进行判断

有些教程中会用 &filetype == 'cpp' 来进行文件类型的判断,但是这样有个BUG。就是对于*.h头文件的识别,不知为何&filetype会识别为cpp或者c。所以如果你使用了&filetype进行文件类型判断,你会发现你的.h文件并不会按你预料的那样插入需要的文件头。

因此,使用文件后缀会是一个不错的选择。expand函数是vim的内置函数之一,% 表示当前文件,e 是修饰符,表示只有扩展名。修饰符有以下几种:

  • :p 扩展为完整的路径
  • :h 去掉最后一个部分
  • :t 只保留最后一个部分
  • :r 根部(去掉扩展名)
  • :e 只有扩展名

更多用法可查看Vim的帮助文档

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

angelavor

觉得有收获,给我个三连吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值