Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36553
  • 博文数量: 23
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-20 09:41
文章分类
文章存档

2011年(1)

2010年(2)

2009年(20)

我的朋友

分类:

2009-10-02 22:45:07

把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) |
给主人留下些什么吧!~~