这几天给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

6 个评论 在 “用vim在代码文件中自动添加#ifdef,#define,#endif的头文件宏定义”

  1. 依云 说:

    这想法真不错

    [回复]

    Dante 回复:

    哈哈,谢谢~~ 还是受你那篇自动添加增、删、改注释的文章的启发呢~~~ 那篇文章实现的功能才叫酷~~

    [回复]

    依云 回复:

    我那篇?你弄错了吧。。。

    [回复]

    Dante 回复:

    呃,弄错了……嘿嘿……

    [回复]

  2. tisyang 说:

    在你博客看了很对vim有帮助的文章,非常感谢!

    [回复]

    Dante 回复:

    不客气的,以后多多交流

    [回复]

我要评论

*

*