转)vimscript in 5 minus
学习 vimscript 理解原生 vim 的配置方法,Reference:
Variables
let
命令用来给变量赋值unset
用来删除一个变量;unset!
删除变量,忽略变量不存在的提示
函数体外初始化的定义是全局变量,函数体内的是局部变量,但是我们可以用let来指定变量的作用域
1 |
|
可以用$name的模式来读取或者改写环境变量,同时用&option的方式读取vim内部设置的值。
数据类型
number-}int, Float, String
Funcref 函数引用,函数引用类型的变量名必须以大写字母开头
1 |
|
List有序列表
1 |
|
Dictionary 无序的kv容器
1 |
|
没有bool类型,除了0都是true;vim8.1 有boolean类型了。
可以用type(varname)
来取得变量的类型
字符串比较
- {string} == {string} 字符串相等
- !=
- {string} =~ {pattern} 匹配pattern
- {operator}# 匹配大小写
- {operator}? 不匹配大小写
1 |
|
流程控制
条件判断:
1 |
|
循环:
1 |
|
for循环:
1 |
|
while循环:
1 |
|
异常捕获
1 |
|
函数
使用fucntion关键字定义一个函数,使用function!
覆盖一个函数的定义,函数也有作用空间的约束,且函数名必须使用大写字母开头
1 |
|
delfunction {function}
删除函数
call {function}
调用一个函数,函数调用前的call语句是必须的,除非在一个表达式里。
有一种特殊的调用函数的方式,可以指明该函数作用的文本区域是从当前缓冲区的第几行到第几行,按照 “1,3call Foobar() ”的格式调用一个函数的话,该函数会在当前文件的第一行到第三行每一行执行一遍,再这个例子中,该函数总共被执行了三次。
如果你在函数声明的参数列表后添加一个 range 关键字,那函数就只会被调用一次,这时两个名为 a:firstline
和 a:lastline
的特殊变量可以用在该函数内部使用。
面向对象
Vim 没有原生的类的支持,但是你可以用字典模拟基本的类。为了定义一个类的方法,可以在函数声明时使用 dict 关键字来将内部字典暴露为 self 关键字:
1 |
|
类的实现更类似于 singleton,为了在 VimScript 中创建类的实例,我们对字典使用 deepcopy()方法进行拷贝(实例化):
1 |
|
Autocmd 自动命令
当事件发生时自动执行命令,一个比较常见的应用场景如:对不同的文件类型使用不同的缩进、折叠、制表方式。
转)vimscript in 5 minus