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

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 - [email protected]")
        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.
用宏:
q
u
J
j
q            // 到这里宏录制完成
100@u        // 执行100次宏.多的会退出,没有关系
结果如何?


例二:
一个文件100行,删除奇数行.
用宏:
q
u
dd
j
q
50@u



再加两个选项:
set number
set tabstop=4

我觉得很有用,其它的选项可有可无.google一下一大把.


你可能感兴趣的:(vim,宏)