用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几个小技巧(批量替换,列编辑) (阅读:35698)
- 简明Vim练级攻略 (阅读:20529)
- Vim下的代码自动补全和代码跳转阅读 (阅读:14217)
- 为什么要用 Emacs/Vim,而不是任何其他编辑器 (阅读:12026)
- 在vim(gvim)中运行终端(对,你没有看错,我也没有写反) (阅读:9287)
- vim入门,进阶与折腾 (阅读:9028)
- 让vim在终端下的配色亮起来! (阅读:8530)
- 最近总结的一些技巧(vim,python,svn,fiddler等) (阅读:6932)
- vim的复制粘贴小结 (阅读:6393)
- Vim 中截取部分内容保存到其他文件 (阅读:6275)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:Dante 来源: Vimer
- 标签: vim
- 发布时间:2010-01-10 13:30:34
- [13] 手机客户端交互适配设计之我见
- [11] 谈谈Facebook的聊天系统架构
- [11] 一个 VLA (可变长度数组)的实现
- [11] 一句话crontab实现防ssh暴力破解
- [10] Python连接 MySQL 数据库的超时问
- [10] 长假,回忆小时候的家庭教育点滴
- [10] 四年前的今天,我开始找工作
- [10] Oracle bbed工具的编译
- [10] PDC 2010:C#与Visual Bas
- [9] 韩国实名制的破产