您的位置:首页 > 其它

vim 的宏及一些特定用法的记录

2010-02-19 14:29 246 查看
vim 的宏及一些特定用法的记录

平时常用vim写bash脚本,写perl脚本.
一直想让vim能自动添加一些文件,加入一些作者信息,日期,描述之类的东西.就想用vim的宏功能来解决这个问题.
在~/.vimrc文件里面加入:let @m = "i#!/b^Huse^Hr/bin/perl^M^M# page ^["   注释: ^M 是CR,即回车符         ^[ 是ESC键         ^H 是退格键.(我这里输错好几个地方,所以按了几个退格键)
保存退出.随便新建一个文件直接输入@m,看看有什么?
这个语句可以自己写.也可以生成.用vim的宏生成方法如下:新建一个文件,按q              // 开始录制宏再按u            // 这是宏的名字然后就可以输入一些内容或者你常用的一些动作.完事后按esc键推出到命令模式再按q结束宏的录制,这样,刚才的操作过程就录制到了名字为u的宏中.
接下来就是看看宏的内容了,也就是上面所谓的生成宏的代码.在命令行里输入"up            // 双引号+宏名+p看到代码了把?复制粘贴到.vimrc中把.格式:let @宏名 = "代码"
下次使用的时候,直接输入@m就可以插入这些信息   注:我曾经想让它在新建一个文件的时候,自动加入,成是成功了.但是带来一个不能接受的后果.就是每次打开文件的时候也会插入.......--!,就是在vimrc中加入一行内容@m           // 这里有个问题,就是这样调用,会西安进入末行模式,不是命令行             // 模式,所以宏并不会起作用,需要在代码前面加入^M,及esc,退出             // 到命令行模式才行.
寻思着能不能加入一个判断语句.但是无果.

其实到这里也已经能用了,但是这个@符号是我最不喜欢打的符号之一.麻烦.幸运的是今天无意中发现一个更好的方法.

再vimrc中加入如下代码:"进行版权声明的设置

"添加或更新头

map <F4> ms:call TitleDet()<cr>'s

function AddTitle()

        call append(0,"#####################################################")

        call append(1,"#")

        call append(2,"#                Author: jason - jasonyy77@163.com")

        call append(3,"#")

        call append(4,"#                     QQ : 285642427")

        call append(5,"#")

        call append(6,"# Last modified: ".strftime("%Y-%m-%d %H:%M"))

        call append(7,"#")

        call append(8,"#            Filename: ".expand("%:t"))

        call append(9,"#")

        call append(10,"#     Description: 没有什么,就是一些练习.")

        call append(11,"#")

        call append(12,"####################################################")

        echohl WarningMsg | echo "Successful in adding the copyright." | echohl None

endf

"更新最近修改时间和文件名

function UpdateTitle()

        normal m'

        execute '/# *Last modified:/s@:.*$@\=strftime(":\t%Y-%m-%d %H:%M")@'

        normal ''

        normal mk

        execute '/# *Filename:/s@:.*$@\=":\t\t".expand("%:t")@'

        execute "noh"

        normal 'k

        echohl WarningMsg | echo "Successful in updating the copy right." | echohl N

one

endfunction

"判断前10行代码里面,是否有Last modified这个单词,

"如果没有的话,代表没有添加过作者信息,需要新添加;

"如果有的话,那么只需要更新即可

function TitleDet()

        let n=1

        "默认为添加

        while n < 10

                let line = getline(n)

                if line =~ '^\#\s*\S*Last\smodified:\S*.*$'

                        call UpdateTitle()

                        return

                endif

                let n = n + 1

        endwhile

        call AddTitle()

endfunction代码来源:http://www.vimer.cn/2010/01/用vim在代码文件中自动添加ifdefdefineendif.html
我稍为改了一下头信息.改成自己的了.希望作者不要介意.还可以做一些修改.但是我觉得这个已经很不错了.只需要改动一个文字就OK.3Q作者
用法很简单了.
创文件的时候按下F4就可以了.修改好文件的时候,按F4还可以更新修改里面的时间       // 这点很强大
至于里面的语法.和其它语言也差不多.详细的.google vim脚本
下面有一个很好的连接:Vim 实用技术,第 1 部分: 实用技巧Vim 实用技术,第 2 部分: 常用插件Vim 实用技术,第 3 部分: 定制 Vim

随便说一些宏真是一个很好的东西:

下面举几个例子:一个文件100行,需要把1,2行合并,3,4行合并,依次类推.合并行都知道是J.用宏:quJjq            // 到这里宏录制完成100@u        // 执行100次宏.多的会退出,没有关系结果如何?

例二:一个文件100行,删除奇数行.用宏:quddjq50@u

再加两个选项:
set numberset tabstop=4
我觉得很有用,其它的选项可有可无.google一下一大把.

本文出自 “jasonyong” 博客,请务必保留此出处http://jasonyong.blog.51cto.com/47753/276995
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: