突然发现一年没更新了。更一个凑数(。
公司一直要求写代码要求加文件头注释和函数头注释,但是做当前这个项目的时候一直没加。
被发现后屌了一顿,在补注释的时候发现这种机械性的操作还是需要snippet来做比较方便。
但是公司所有环境隔离,给vim装个snippet插件是不太好搞了,于是自己实现了个简单够用的snippet功能。
参考了reddit上这个讨论, 结合m4来实现。
思路是:vim用map自动输入宏,补全参数,最后调用m4展开
首先是m4文件
divert(-1)
define(`FILEHEAD', `/***********************************************************************
* Copyright Xiamen Meiya Pico Information Co., Ltd. 2019-2020.
* All rights reserved.
*
* 文件名称: '$1`
* 功能描述: '$2`
* 作 者: cirno
* 日 期: 'esyscmd(`date +%Y.%m.%d')dnl
` * 修改记录:
* 1. 修改内容: 首次创建
* 日 期: 'esyscmd(`date +%Y.%m.%d')dnl
` * 修 改 者: cirno
*************************************************************************/
')
define(`FUNCHEAD', `/************************************************************************
* 函数名称:'$1`
* 功能描述: '$2`
* 输入参数:'$3`
* 输出参数: '$4`
* 返 回 值: '$5`
* 修改记录:
* 1. 修改内容: 首次创建
* 日 期: 'esyscmd(`date +%Y.%m.%d')dnl
` * 修 改 者: cirno
************************************************************************/')
divert(0)
把所有的snippet定义在m4文件内,日期可以调用date来插入
然后在.vimrc里面加入vim要做的操作
"没有插件情况下简易的snippet实现
"自己用的snippet,依靠m4实现
"跳到下一参数
inoremap ;; <ESC>/{%[^%]*%<cr>v/%}<cr><right>c
""执行展开
nnoremap <C-h>e V:!m4<Enter>
"
""补全文件注释头
nnoremap <C-h>h iinclude(`/root/.snippets/snippets.m4')FILEHEAD(`<C-r>%',`{% <desc> %}')
""补全函数注释头
nnoremap <C-h>f iinclude(`/root/.snippets/snippets.m4')FUNCHEAD(`{% <name> %}',`{% <desc> %}',`{% <input pram> %}',`{% <output parm> %}',`{% <ret val> %}')'`'`'`'`'`)')`)
效果就是,按下ctrl+h h插入文件头宏,按;;补全描述,文件名就由vim自己填充了
按下ctl+h f插入函数头宏,一样用;;补全各个参数
最后按ctrl+h e执行展开
@