Board logo

标题: Vim 实用技术,第 3 部分 定制 Vim(1) [打印本页]

作者: look_w    时间: 2018-5-18 21:25     标题: Vim 实用技术,第 3 部分 定制 Vim(1)

3.1. Vim 脚本基础在 .vimrc 文件中,和在第二章提到的插件和语法文件中,使用的语言就是 Vim 脚本语言。这种脚本语言语法有点像 BASIC,表达式有点像 C,还是比较容易理解的。本章中并不打算对其作很系统的介绍(要完整了解的话,请参见“:help usr_41.txt”),而只是介绍一些基本知识,特别是,了解定制 .vimrc 所需要的基本知识。
Vim 脚本相当于可直接在命令模式下执行的命令,只是不需要输入前面的冒号(如果用了冒号也不会出错)。因此,像设置选项、创建键盘映射这样的命令是直接可用的。当然,作为一种脚本语言,除了普通键盘上会输入的命令外,我们还需要一些更复杂的功能,特别是:变量,表达式,条件和循环语句,函数。
3.1.1.  变量Vim 中使用如下的语法对变量进行赋值(创建变量):
1
let 变量名 = 数值




变量类型有两种,整数和字符串,在第一次赋值之前都不能使用。变量名除了可使用常规的字母、下划线和数字外,还可以使用几种特殊的前缀:
下面三个前缀用来访问特殊的数值,由于行为和变量较为相似(可以读取和修改),也放在这儿一起讲:
当变量不再使用时,可以使用“unlet 变量名”删除变量。
3.1.2. 表达式和 C 非常类似,可以使用变量和常量,可以使用括号,可以调用函数(“函数名(...)”),支持加法(“+”)、减法(“-”)、乘法(“*”)、除法(“/”)和取模(“%”),支持逻辑操作(“&&”、“||”和“!”),支持三元条件表达式(“a ? b : c”)。字符串操作方面当然比 C 要强,可以使用“.”进行字符串拼接;可使用“==”、“<=”等进行字符串大小比较,可使用“=~”和“!~”进行正则表达式匹配,而且可以在比较操作符后面添加“#”或“?”来强制进行大小写敏感或不敏感的比较(缺省受 Vim 选项 ignorecase 影响)。显示一个表达式的结果,可以使用“:echo 表达式”显示到状态栏上,或者在插入模式下使用“Ctrl-R=表达式”插入到缓冲区的文本中。
和其它很多在 Unix 下成长起来的语言一样,Vim 的字符串常量有双引号和单引号两种方式。使用单引号的话,单引号间的任何字符都是字符串的一部分,其中不能再包含单引号。使用双引号的话,则可以使用“\”产生换码序列(具体可参考“:help expr-quote”),如“\n”代表换行符,“\"”代表双引号,“\\”代表反斜杠本身,等等。
需要注意的话,双引号除了可以表示字符串常量外,还可以表示注释。行首的“"”,以及表达式中出现的成单的“"”,都表示“"”后面的部分全部是注释。
3.1.3. 条件和循环语句条件语句形式如下:
1
2
3
if 表达式
  语句
endif





1
2
3
4
5
if 表达式
  语句
else
  语句
endif





1
2
3
4
5
if 表达式
  语句
elseif 表达式
  语句
endif




循环语句形式如下:
1
2
3
while 表达式
  语句
endwhile




条件和循环语句都可以嵌套。这些比较简单,就不多加说明了。
3.1.4. 函数在表达式中使用函数时,就跟 C 里面的方式类似,直接使用函数名加括号,括号里写上参数(可选)。在不需要返回值的情况下调用函数时,稍稍有些不同,要使用“call”命令,后面跟函数名和括号(括号里面写上可能有的参数)。
定义函数使用下面的语法:
1
2
3
function 函数名称(参数列表)
  语句
endfunction




如果已有同名函数存在,Vim 会报错,除非在“function”后面加上一个“!”。
如果参数中不包含“...”,那么参数的数量是固定的,函数的调用者必须提供跟定义同样多的参数(在函数定义中使用参数名之前加上“a:”进行访问)。如果参数中包含“...”,那么参数的数量不固定,除了可以使用参数名称访问传递过来的参数外,还可以使用“a:0”知道额外传递的参数数量,使用“a:1”、“a:2”等访问这些额外传递的参数。
要在函数的中间返回,或者要返回数值的话,可以使用“return”语句。
Vim 内部定义了一百多个函数,详细列表请参见“:help function-list”。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0