用vim在代码文件中自动添加#ifdef,#define,#endif的头文件宏定义
Published on 一月 10, 2010
这几天给vim写了许多新功能,包括自动添加#ifndef,#define,#endif,以及在变更代码时自动对代码进行相关操作时间和操作人等,我就慢慢来写吧~~
首先说一下自动添加宏定义的这个功能,其实在自己写之前,我在网上google过一次,试图找出一份前辈们已经有的代码,结果最终还是失望而回。可能因为我输入的关键词不对,可能是搜索引擎不准,总之,我最后还是得自己写啦,希望我写的每一篇文章都能对大家起到帮助吧~~~
首先说一下实现的功能
1.自动根据文件名,生成 宏定义的名字,例如 temp.h ,就生成 _TEMP_H_
2.由于我通常在源代码中会加入这样的作者信息:
1 2 3 4 5 6 7 8 9 | /*=============================================================================
# FileName:
# Desc:
# Author: dantezhu - http://www.vimer.cn
# Email: zny2008@gmail.com
# Version: 0.0.1
# LastChange: 2011-02-21 18:06:30
# History:
=============================================================================*/ |
所以希望能在生成时加上判断,一旦发现有这样的定义,那么宏定义是要放在作者信息之后的。
至于怎样生成作者信息,大家可以看这篇文章。Vim在源代码中自动添加作者信息
嗯,说到上面这篇自动生成作者信息的文章,之前在网上无意中看到有人直接复制了我整篇文章,改了下作者名字,然后去掉了文章原连接来源就发表出来。我希望自己的文章是越多人分享,越多人看到越好,但是起码请给原作者一点尊重,注明出处,行不?好啦,不说这件事啦,我们继续啦
基于上面的两点,我们来看一下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | function InsertHeadDef(firstLine, lastLine) if a:firstLine <1 || a:lastLine> line('$') echoerr 'InsertHeadDef : Range overflow !(FirstLine:'.a:firstLine.';LastLine:'.a:lastLine.';ValidRange:1~'.line('$').')' return '' endif let sourcefilename=expand("%:t") let definename=substitute(sourcefilename,' ','','g') let definename=substitute(definename,'\.','_','g') let definename = toupper(definename) exe 'normal '.a:firstLine.'GO' call setline('.', '#ifndef _'.definename."_") normal ==o call setline('.', '#define _'.definename."_") exe 'normal =='.(a:lastLine-a:firstLine+1).'jo' call setline('.', '#endif') let goLn = a:firstLine+2 exe 'normal =='.goLn.'G' endfunction function InsertHeadDefN() let firstLine = 1 let lastLine = line('$') let n=1 while n < 20 let line = getline(n) if n==1 if line =~ '^\/\*.*$' let n = n + 1 continue else break endif endif if line =~ '^.*\*\/$' let firstLine = n+1 break endif let n = n + 1 endwhile call InsertHeadDef(firstLine, lastLine) endfunction nmap ,ha :call InsertHeadDefN()<CR> |
代码写的很清楚拉,当在normal模式按下,ha,就会先匹配/*..*/这样的组合,如果匹配成功的话,就会在*/后插入 宏定义,如果匹配不成功的话,就会在一开始插入宏定义。
最后鸣谢牧码志 的一篇文章给我的帮助,呵呵~~
好啦,赶紧去试试吧!~~~
原创文章,版权所有。转载请注明:转载自Vimer的程序世界 [ http://www.vimer.cn ]
本文链接地址: http://www.vimer.cn/?p=781
这想法真不错
[回复]
Dante 回复:
一月 10th, 2010 at 2:34 下午
哈哈,谢谢~~ 还是受你那篇自动添加增、删、改注释的文章的启发呢~~~ 那篇文章实现的功能才叫酷~~
[回复]
依云 回复:
一月 11th, 2010 at 12:15 上午
我那篇?你弄错了吧。。。
[回复]
Dante 回复:
一月 11th, 2010 at 9:55 上午
呃,弄错了……嘿嘿……
[回复]
在你博客看了很对vim有帮助的文章,非常感谢!
[回复]
Dante 回复:
十月 2nd, 2010 at 1:49 下午
不客气的,以后多多交流
[回复]