需求
在我们编写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的帮助文档