把vim的script学习了一下, 做一下总结。
1, VIM的变量, 有numeric, character, list, dictionary.
其中list类型的变量和R中的vector很相似, 比如:
alist=[1, 2, 3]
使用起来也很相似: alist[2], alist[2:]都是合法的。
dictionay变量的赋值:
adic={'a':3, 'b':4}
adic.a, adic.b 是合法的。
list 和 dictionay 有很多的内置函数可以对他们进行操作, 可以参考相应的文档。 在vim中 :help script 可以找到script相关的文档, 包括和list, dictionay操作有关的函数。
dictionay还有一种OO式的函数:
:let transdict = {}
:function transdict.translate(line) dict
: return join(map(split(a:line), 'get(self.words, v:val, "???")'))
:endfunction
Now we can instantiate a Dutch translation object:
:let uk2nl = copy(transdict)
:let uk2nl.words = {'one': 'een', 'two': 'twee', 'three': 'drie'}
:echo uk2nl.translate('three one')
drie een ~
And a German translator:
:let uk2de = copy(transdict)
:let uk2de.words = {'one': 'ein', 'two': 'zwei', 'three': 'drei'}
:echo uk2de.translate('three one')
drei ein ~
2, VIM还有一种变量是函数的引用。 funref。
比如, myfun = function(oldfun)
3, 变量的范围
b:name variable local to a buffer
w:name variable local to a window
g:name global variable (also in a function)
v:name variable predefined by Vi
4, 变量的分类
普通的变量可以直接引用。 其它:
$NAME environment variable
&name option
@r register
5, 执行表达式
execute 表达式:
:execute "tag " . tag_name
normal 表达式
:normal gg=G
表示移动到文本首行, 对齐到未行, 而
:execute "normal ". name
call 函数
perl中的 =~ 和 !~ 操作符也是可以使用的。
6, let 和 set的区别:
let是定义和赋值变量 , 而set是高设定VIM内置变量的值。
其中unlet可以删除变量。
:exists("a") "检查有没有定义a变量。
:echo a "打印变量
:echoerr "xxx" "打印错误
:echohl WarningMsg | echo "Don't panic!" | echohl None
7, 函数的定义
function! fun_name(arg list)
code here
endfunction
!表示如果已经有fun_name这个函数的话, 那就重新定义。 否则会报错。
8, 内置函数
可以 :help script 中可以找到函数及分类
9, range 函数
:function Count_words() range
: let lnum = a:firstline
: let n = 0
: while lnum <= a:lastline
: let n = n + len(split(getline(lnum)))
: let lnum = lnum + 1
: endwhile
: echo "found " . n . " words"
:endfunction
这样如果 :1, 14call Count_words
而如果没有rang, 则 :1,14call fun_name 是对每一行执行这个函数。
其中a:firstline是指函数参数, 其它的, a:1 a:2 等等都是相应的参数, a:0指所有的参数, a:000是指列表中省略的参数, 即"..."部分。
10, Exception
:try
: read ~/templates/pascal.tmpl
:catch /E484:/
: echo "Sorry, the Pascal template file cannot be found."
:finally
: call xxx
:endtry
11, 写plugin, 或者 ftplugin.
注意<SID> <unique>
等, 具体略过。
阅读(1878) | 评论(0) | 转发(0) |