基本语法

注释

在写脚本时,经常需要在源码里面添加一些注释信息,辅助阅读源码,VIM 脚本注释比较简单,是以 " 开头的,只存在行注释,不存在块注释。因此,对于多行注释,需要再每行开头添加 "。示例:

" 这是一行注释,
let g:helloworld = 1  " 这是在行尾注释

变量

在 VIM 脚本里,可以使用关键字 let 来申明变量,最基本的方式为:

" 定义一个类型是字符串的变量 g:helloworld
let g:helloworl = "sss"

前面的例子中,是定义一个字符串,VIM 脚本中支持以下几种数据类型:

类型 ID 描述
Number 0 整数
String 1 字符串
Funcref 2 函数指针
List 3 列表
Dictionary 4 字典
Float 5 浮点数
Boolean 6
None 7
Job 8
Channel 9

作用域

VIM 变量存在三种作用域,全局变量、局部变量、和脚本变量。通常,我们以不同的前缀来区别作用域,比如使用 g: 表示全局变量,s: 表示脚本变量。 在一些特殊情况下,前缀是可以省略的,VIM 会为该变量选择默认的作用域。不同的情况下,默认的作用域是不一样的,在函数内部,默认作用域是局部变量, 而在函数外部,默认作用域是全局变量:

let g:helloworld = 1  " 这是一个全局变量, g: 前缀未省略
let helloworld = 1    " 这也是一个全局变量,在函数外部,默认的作用域是全局的
function! HelloWorld()
  let g:helloworld = 1    " 这是函数内部全局变量
  let helloworld = 1      " 这是一个函数内部的局部变量,在函数内部,默认的作用域为局部变量
endfunction
前缀 描述
g: 全局变量
l: 局部变量,只可在函数内部使用
s: 脚本变量,只可以在当前脚本函数内使用
v: VIM 特殊变量
b: 作用域限定在某一个缓冲区内
w: 作用域限定在窗口内部
t: 作用域限定在标签内部

此外,在开发 VIM 插件之前,你还需要了解 vimrc 和 VIM 插件的区别。