最后更新于 .

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

最后鸣谢牧码志 的一篇文章给我的帮助,呵呵~~ 好啦,赶紧去试试吧!~~~

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 依云

    依云 on #

    这想法真不错

    Reply

    1. Dante

      Dante on #

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

      Reply

      1. 依云

        依云 on #

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

        Reply

        1. Dante

          Dante on #

          呃,弄错了……嘿嘿……

          Reply

  2. tisyang

    tisyang on #

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

    Reply

    1. Dante

      Dante on #

      不客气的,以后多多交流

      Reply

  3. 希尔博

    希尔博 on #

    您的分享精神深深打动了我,最近几天受益匪浅啊, 真的非常感谢啦, 希望博主加油啊,这么多我等之辈的菜鸟等着您的教程呢,哈哈哈。

    Reply

  4. jeffreyst

    jeffreyst on #

    楼主是高手,今后要多来这里看看,哈哈~

    Reply

  5. pangchol

    pangchol on #

    我是一个刚刚起步学习linux编程到大学毕业生,在确定自己到编辑器是vim之后就找到了你博客,花了几天时间研究来个大概,其实vim到知识让我对vim到使用进步到很快,还有很多C/C++类到好东西,以后慢慢研究,感觉在这里像是进来免费学堂一样。因此,,,,想特意来谢谢善良到vimer,,,谢谢啦^_^!

    Reply

发表评论