这几天给vim写了许多新功能,包括自动添加#ifndef,#define,#endif,以及在变更代码时自动对代码进行相关操作时间和操作人等,我就慢慢来写吧~~ 首先说一下自动添加宏定义的这个功能,其实在自己写之前,我在网上google过一次,试图找出一份前辈们已经有的代码,结果最终还是失望而回。可能因为我输入的关键词不对,可能是搜索引擎不准,总之,我最后还是得自己写啦,希望我写的每一篇文章都能对大家起到帮助吧~~~ 首先说一下实现的功能 1.自动根据文件名,生成 宏定义的名字,例如 temp.h ,就生成 _TEMP_H_ 2.由于我通常在源代码中会加入这样的作者信息:
/*=============================================================================
# FileName:
# Desc:
# Author: dantezhu - https://www.vimer.cn
# Email: zny2008@gmail.com
# Version: 0.0.1
# LastChange: 2011-02-21 18:06:30
# History:
=============================================================================*/
所以希望能在生成时加上判断,一旦发现有这样的定义,那么宏定义是要放在作者信息之后的。 至于怎样生成作者信息,大家可以看这篇文章。Vim在源代码中自动添加作者信息 嗯,说到上面这篇自动生成作者信息的文章,之前在网上无意中看到有人直接复制了我整篇文章,改了下作者名字,然后去掉了文章原连接来源就发表出来。我希望自己的文章是越多人分享,越多人看到越好,但是起码请给原作者一点尊重,注明出处,行不?好啦,不说这件事啦,我们继续啦 基于上面的两点,我们来看一下代码:
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,就会先匹配/*..*/这样的组合,如果匹配成功的话,就会在*/后插入 宏定义,如果匹配不成功的话,就会在一开始插入宏定义。
最后鸣谢牧码志 的一篇文章给我的帮助,呵呵~~ 好啦,赶紧去试试吧!~~~
依云 on #
这想法真不错
Reply
Dante on #
哈哈,谢谢~~ 还是受你那篇自动添加增、删、改注释的文章的启发呢~~~ 那篇文章实现的功能才叫酷~~
Reply
依云 on #
我那篇?你弄错了吧。。。
Reply
Dante on #
呃,弄错了……嘿嘿……
Reply
tisyang on #
在你博客看了很对vim有帮助的文章,非常感谢!
Reply
Dante on #
不客气的,以后多多交流
Reply
希尔博 on #
您的分享精神深深打动了我,最近几天受益匪浅啊, 真的非常感谢啦, 希望博主加油啊,这么多我等之辈的菜鸟等着您的教程呢,哈哈哈。
Reply
jeffreyst on #
楼主是高手,今后要多来这里看看,哈哈~
Reply
pangchol on #
我是一个刚刚起步学习linux编程到大学毕业生,在确定自己到编辑器是vim之后就找到了你博客,花了几天时间研究来个大概,其实vim到知识让我对vim到使用进步到很快,还有很多C/C++类到好东西,以后慢慢研究,感觉在这里像是进来免费学堂一样。因此,,,,想特意来谢谢善良到vimer,,,谢谢啦^_^!
Reply