用vim在代码文件中自动添加#ifdef,#define,#endif的头文件宏定义
这几天给vim写了许多新功能,包括自动添加#ifndef,#define,#endif,以及在变更代码时自动对代码进行相关操作时间和操作人等,我就慢慢来写吧~~
首先说一下自动添加宏定义的这个功能,其实在自己写之前,我在网上google过一次,试图找出一份前辈们已经有的代码,结果最终还是失望而回。可能因为我输入的关键词不对,可能是搜索引擎不准,总之,我最后还是得自己写啦,希望我写的每一篇文章都能对大家起到帮助吧~~~
首先说一下实现的功能
1.自动根据文件名,生成 宏定义的名字,例如 temp.h ,就生成 _TEMP_H_
2.由于我通常在源代码中会加入这样的作者信息:
/*==========================================================
#
# Author: DanteZhu - dantezhu@vip.qq.com
#
# QQ: 327775604
#
# Last modified: 2010-01-09 23:53:16
#
# Filename: 在vim中自动添加#ifdef,#define,#endif.cpp
#
# Description:
#
============================================================*/
所以希望能在生成时加上判断,一旦发现有这样的定义,那么宏定义是要放在作者信息之后的。
至于怎样生成作者信息,大家可以看这篇文章。Vim在源代码中自动添加作者信息
嗯,说到上面这篇自动生成作者信息的文章,之前在网上无意中看到有人直接复制了我整篇文章,改了下作者名字,然后去掉了文章原连接来源就发表出来。我希望自己的文章是越多人分享,越多人看到越好,但是起码请给原作者一点尊重,注明出处,行不?好啦,不说这件事啦,我们继续啦
基于上面的两点,我们来看一下代码:
function InsertHeadDef(firstLine, lastLine)
”校验范围是否在当前Buffer的总行数之内
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
“Normal模式下插入头定义
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,就会先匹配/*..*/这样的组合,如果匹配成功的话,就会在*/后插入 宏定义,如果匹配不成功的话,就会在一开始插入宏定义。
最后鸣谢 牧码志 的一篇文章给我的帮助,呵呵~~
好啦,赶紧去试试吧!~~~
建议继续学习:
- vim几个小技巧(批量替换,列编辑) (阅读:35923)
- 简明Vim练级攻略 (阅读:20722)
- Vim下的代码自动补全和代码跳转阅读 (阅读:14360)
- 为什么要用 Emacs/Vim,而不是任何其他编辑器 (阅读:12147)
- 在vim(gvim)中运行终端(对,你没有看错,我也没有写反) (阅读:9345)
- vim入门,进阶与折腾 (阅读:9178)
- 让vim在终端下的配色亮起来! (阅读:8570)
- 最近总结的一些技巧(vim,python,svn,fiddler等) (阅读:7051)
- vim的复制粘贴小结 (阅读:6485)
- Vim 中截取部分内容保存到其他文件 (阅读:6328)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: vim
- 发布时间:2010-01-10 13:30:34
- [55] IOS安全–浅谈关于IOS加固的几种方法
- [54] android 开发入门
- [54] 如何拿下简短的域名
- [54] 图书馆的世界纪录
- [52] Go Reflect 性能
- [52] Oracle MTS模式下 进程地址与会话信
- [49] 【社会化设计】自我(self)部分――欢迎区
- [48] 读书笔记-壹百度:百度十年千倍的29条法则
- [41] 程序员技术练级攻略
- [35] 视觉调整-设计师 vs. 逻辑