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一下一大把.