技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> 用vim在代码文件中自动添加#ifdef,#define,#endif的头文件宏定义

用vim在代码文件中自动添加#ifdef,#define,#endif的头文件宏定义

浏览:4061次  出处信息

这几天给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,就会先匹配/*..*/这样的组合,如果匹配成功的话,就会在*/后插入 宏定义,如果匹配不成功的话,就会在一开始插入宏定义。

最后鸣谢 牧码志 的一篇文章给我的帮助,呵呵~~

好啦,赶紧去试试吧!~~~

建议继续学习:

  1. vim几个小技巧(批量替换,列编辑)    (阅读:35923)
  2. 简明Vim练级攻略    (阅读:20722)
  3. Vim下的代码自动补全和代码跳转阅读    (阅读:14360)
  4. 为什么要用 Emacs/Vim,而不是任何其他编辑器    (阅读:12147)
  5. 在vim(gvim)中运行终端(对,你没有看错,我也没有写反)    (阅读:9345)
  6. vim入门,进阶与折腾    (阅读:9178)
  7. 让vim在终端下的配色亮起来!    (阅读:8569)
  8. 最近总结的一些技巧(vim,python,svn,fiddler等)    (阅读:7051)
  9. vim的复制粘贴小结    (阅读:6485)
  10. Vim 中截取部分内容保存到其他文件    (阅读:6328)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
  • 作者:Dante    来源: Vimer
  • 标签: vim
  • 发布时间:2010-01-10 13:30:34
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1