负责任的编码
代码折叠,e.g.
1 | " Vimscript file settings {{{ |
变量
e.g.
1 | " 变量赋值 |
注:在set可以搞定的时候,永远都不要用let,这是因为let更难于阅读。
变量作用域
1 | " b:表示本地作用域变量 |
条件语句
对于多行语句可以采用管道|
来执行
对于vimscript有如下结论:
- 如有必要,Vim将强制转换变量(和字面量)的类型。在解析10 + “20foo”时,Vim将把”20foo”转换成一个整数(20)然后加到10上去。
- 以一个数字开头的字符串会被强制转换成数字,否则会转换成0。
- 在所有的强制转换完成后,当if的判断条件等于非零整数时,Vim会执行if语句体。
1 | :if 0 |
比较
1 | :set ignorecase |
==
的行为取决于用户的设置,这意味着在为别人开发插件时,你不能信任==
==?
是无论你怎么设都大小写不敏感
==#
是无论你怎么设都大小写敏感
函数
:function meow()
,出错,没有作用域限制的vimscript函数必须以一个大写字母开头
函数定义,e.g.
1 | :function Meow() |
函数运行,返回值丢弃,e.g. :call Meow()
在表达式里调用函数,e.g. :echom GetMeow()
函数没有return值时,会隐式返回0
函数参数
在写需要参数的Vimscript函数的时候,你总需要给参数加上前缀a:
,来告诉Vim去参数作用域查找。
可变参数,e.g.
1 | :function Varg2(foo, ...) |
a:0
为额外参数的数量a:1
为第一个额外参数,a:2
同理a:000
为一个包括所有传递过来的额外参数的列表
注意:
- 不能对参数变量重新赋值
- 全局变量的访问需要通过
g:
数字
两种数值类型:
- Number
- Float
echo 5e10
,错误,小数点和小数点后的数字是必须要有的
注意,浮点数仅当编译时加入+float
特性时才可以使用
字符串
.
用来连接字符串,e.g. :echom "Hello, " . "world"
:echom 10 + "10.10"
,显示20
,强制转换"10.10"
时,小数点后的内容被丢弃
echom 10 . "foo"
,显示10foo
echom 10.1 . "foo"
,错误在连接字符串时不能把Float当作String
注意,有时echom
的输出跟echo
会有所不同,e.g.
1 | :echo "foo\nbar" |
字符串字面量(无视转义字符串),采用单引号而不是双引号,而两个连续的单引号在字符串字面量里面会显示为一个单引号,不连续会出错
字符串函数
长度,strlen()
或 len()
切割,split()
,把字符串切割成列表,以空格为分割界限,也可以指定分隔符,e.g. :echo split("one,two,three",",")
,显示['one','two','three']
连接,join()
,e.g. :echo join(["foo", "bar"], "...")
,显示foo...bar
大小写转换,tolower()
,变小写;toupper()
,变大写
Execute命令
e.g. :execute "rightbelow vsplit " . bufname('#')
Normal命令
把我们的脚本跟日常的文本编辑命令结合起来
normal
命令将顾及当前的所有映射
normal!
命令将不会顾及当前所有映射
注意,在写vim脚本时,应该总是使用normal!
,永不使用normal
;不要信任用户在~/.vimrc
中的映射
有时阅读一个vim命令的文档可以激发关于别的内容的奇思妙想