vim实现无插件的snippet

突然发现一年没更新了。更一个凑数(。

公司一直要求写代码要求加文件头注释和函数头注释,但是做当前这个项目的时候一直没加。
被发现后屌了一顿,在补注释的时候发现这种机械性的操作还是需要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执行展开

@

Show Comments