VimScript 五分钟入门(翻译)
译注:折腾 Vim 当然要能看懂和改写相关脚本,而中文资料匮乏,缺一个提纲挈领的教程。本文翻译自 Andrew Scala 的 《Five Minute Vimscript》,立足于让你用最短的时间掌握 VimScript 的基础和要点,你可以把它看成一份语言速查表。
Vim有着丰富的内建文档系统,使用 :h <关键词>
就可以阅读,如果你想在方便的尝试各种 vimscript ,你可以通过 NORMAL 模式下使用 gQ
命令进入 VimScript 的交互式环境调试命令。
注意:下面的例子中会包含一些形如 <符号>
的符号,意味着正式使用时应该被完全替换成真实的东西,包括左右两边的尖括号。而单独的 <
和 >
在 VimScript 中被用作比较符号。
变量
let
命令用来对变量进行初始化或者赋值。unlet
命令用来删除一个变量。unlet!
命令同样可以用来删除变量,但是会忽略诸如变量不存在的错误提示。
默认情况下,如果一个变量在函数体以外初始化的,那么它的作用域是全局变量;而如果它是在函数体以内初始化的,那它的作用于是局部变量。同时你可以通过变量名称前加冒号前缀明确的指明变量的作用域:
- g:var – 全局
- a:var – 函数参数
- l:var – 函数局部变量
- b:var – buffer 局部变量
- w:var – window 局部变量
- t:var – tab 局部变量
- s:var – 当前脚本内可见的局部变量
- v:var – Vim 预定义的内部变量
你可以通过 $name 的模式读取或者改写环境变量,同时可以用 &option 的方式来读写 vim 内部的设置值。
数据类型
Number:32 位有符号整数
-123 0x10 0177
Float: 浮点数,需要编译 Vim 的时候,有 +float
特性支持
123.456 1.15e-6 -1.1e3
String: NULL 结尾的 8位无符号字符串
"ab\txx\"--" 'x-z''a,c'
Funcref: 函数引用,函数引用类型的变量名必须以大写字母开头
:let Myfunc = function("strlen") :echo Myfunc('foobar') " Call strlen on 'foobar'. 6
List: 有序列表
:let mylist = [1, 2, ['a', 'b']] :echo mylist[0] 1 :echo mylist[2][0] a :echo mylist[-2] 2 :echo mylist[999] E684: list index out of range: 999 :echo get(mylist, 999, "THERE IS NO 1000th ELEMENT") THERE IS NO 1000th ELEMENT
Dictionary: 无序的 Key/Value 容器
:let mydict = {'blue': "#0000ff", 'foo': {999: "baz"}} :echo mydict["blue"] #0000ff :echo mydict.foo {999: "baz"} :echo mydict.foo.999 baz :let mydict.blue = "BLUE" :echo mydict.blue BLUE
没有布尔类型,整数 0 被当作假,其他被当作真。字符串在比较真假前会被转换成整数,大部分字符串都会被转化为 0,除非以非零开头的字符串才会转化成非零。
Recent Comments