学习使用vim的脚本,入门阶段

今天在继续看vim的脚本学习的过程中,学到了点东西,总得还说是从别人的vim脚本里面得到的启发。

这家伙的博客真是不容错过http://blah.blogsome.com/blog_index/#vim_

今天的成果就是我写了自己独立完成的第一个vim的函数,就是列数组生成函数,虽然很简单,但是里面还是有不少学问的。

===============================================

"Usage : To generate a column of continous number
"Example : In command line type :call Array_gen(1, 50, 3)
function! Array_gen(begin_num, end_num, step_num)       

let L1=a:begin_num
while L1<a:end_num
    exec "norm o" . L1 . "\<ESC>"
    let L1=L1+a:step_num
endw

endfunction

===============================================

就是这简简单单的几行代码,忙活了大概半个下午的时间。

一开始的启发是写成一个独立的脚本,后来感觉这个非常好用的小东西还是放入vimrc里面比较好于是就又研究了一下在vimrc里面建立函数应该肿么弄就出了这个东西。

首先要注意的就是函数的范围

g: varname     变量为全局变量
s: varname     变量的范围为当前的脚本文件
w: varname     变量的范围为当前的编辑器窗口
t: varname     变量的范围为当前的编辑器选项卡
b: varname     变量的范围为当前的编辑器缓冲区
l: varname     变量的范围为当前的函数
a: varname     变量是当前函数的一个参数
v: varname     变量是 Vim 的预定义变量

vimrc里面的如果你不声明范围的话就要在函数名的第一个首字母上大写,就好了,主要是我觉得记住范围在call时候需要多打几个字母很麻烦,于是就采用了大写的方式,感觉方便了不少。

接着在怎么把L1打印出来上面犯了难,最后看人家的东西才知道,原来最简单的L1没有任何的引号,括号就可以直接用起来这东西。

再者,最开始的启发是这个脚本。

" 生成Web色表
" 用法:so web_color_gen.vim
" 限制:只能在gui中使用
" 注意:这个脚本在Vim6.3/6.4中有时会出现颜色渲染错误的情况。
" 在Vim7中则没发现类似情况。

" 关闭搜索高亮
se nohls

" 定义数组
" 在Vim7中定义数组就不会这么累了
let c0="00"
let c1="33"
let c2="66"
let c3="99"
let c4="cc"
let c5="ff"

" 生成web色的数值表
let L1=0
while L1<6
let L2=0
while L2<6
let L3=0
while L3<6
exec "norm o\<ESC>" . ':s/^/\=c{L1}.c{L2}.c{L3}." "/' . "\<CR>"
let L3=L3+1
endw
let L2=L2+1
endw
let L1=L1+1
endw

g/./exec 'hi '.expand("<cword>").' guifg=grey guibg=#'.expand("<cword>") |
\ exec 'syn match '.expand("<cword>").' /'.expand("<cword>").' /'


从外部调入脚本就是:so XXXX.vim,之后如果脚本有操作就操作,没有操作(比如调入函数之类的)的你就在命令行下面再自己打命令。

这个是调入后自己动的,我把它改进成了这样,灰常好看啊哈哈

web_color_gen.vim
1 if !has("gui")
2 finish
3 endif
4
5 set nohls
6
7 exec "norm ggVGx"
8
9 let c0="00"
10 let c1="11"
11 let c2="22"
12 let c3="33"
13 let c4="44"
14 let c5="55"
15 let c6="66"
16 let c7="77"
17 let c8="88"
18 let c9="99"
19 let c10="aa"
20 let c11="bb"
21 let c12="cc"
22 let c13="dd"
23 let c14="ee"
24 let c15="ff"
25
26 let L1=0
27 while L1<16
28 let L2=0
29 while L2<16
30 let L3=0
31 while L3<16
32 exec "norm o\<ESC>" . ':s/^/\=c{L1}.c{L2}.c{L3}." "/' . "\<CR>"
33 let L3=L3+1
34 endw
35 let L2=L2+1
36 endw
37 let L1=L1+1
38 endw
39
40 g/./exec 'hi '.expand("<cword>").' guifg=grey guibg=#'.expand("<cword>") |
41 \ exec 'syn match '.expand("<cword>").' /'.expand("<cword>").' /'
42
43 g/./norm 16gJ

不过就是有点慢是了。效果还是非常不错的。



posted @ 2012-02-11 22:00  poiu_elab  阅读(639)  评论(0编辑  收藏  举报