Vim脚本编写入门
入门案例:
- 冒号: 字符非必须,只有键入命令时需要,编写Vim脚本时可以省略
1
2
3
4
5:let i = 1
:while i < 5
: echo "Hello,World!" i
: let i += 1
:endwhile
1.变量
定义变量 :let
:let {变量} = {表达式}
表达式类型==vim脚本变量类型有9种==
数值 32位或64位带符号整数。
64-位整数只有在编译时带 +num64 特性时才有效。
示例: -123 0x10 0177 0b1011
浮点数 带小数的数值。
{仅当编译时加入 +float 特性才有效}
示例: 123.456 1.15e-6 -1.1e3
字符串
列表 项目的有序的序列。
示例: [1, 2, [‘a’, ‘b’]]
字典 关联数组:每个项目包含一个键和一个值
示例: {‘blue’: “#0000ff”, ‘red’: “#ff0000”}
函数引用 指向一个函数的引用
示例: function(“strlen”)
特殊 v:false 、 v:true 、 v:none 和 v:null 。
工作 用于作业
通道 用于通道
数值和字符串类型之间会根据使用的情况自动转换
列表、字典、函数引用、作业和通道类型不会自动进行转换。
变量有不同的命名空间,根据附加的前缀决定:
(无) 函数内: 局部于函数;否则: 全局
buffer-variable b: 局部于当前缓冲区。
window-variable w: 局部于当前窗口。
tabpage-variable t: 局部于当前标签页。
global-variable g: 全局。
local-variable l: 局部于函数。
script-variable s: 局部于 :source 的 Vim 脚本。
function-argument a: 函数参数 (只限于函数内使用)。
vim-variable v: Vim 预定义的全局变量
删除变量 :unlet
:unlet {变量}
例如:unlet s:count,这将删除count局部变量并释放其占用的内存。如果不确定这个变量是否存在,又不希望看到系统在它不存在时报错,可以在命令后面加!,即:unlet! s:count
2. 表达式
1 | expr2 ? expr1 : expr1 if-then-else |
3.语句
:if
单分支:
:if 表达式
代码块
:endif
双分支:
:if 表达式
代码块
:else
代码块2
:endif
多分支:
:if 表达式1
代码块
:elseif 表达式2
代码块2
:else
代码块3
:endif
:while
:while 表达式
代码块
:endwhile
:for
:for {var} in {list}
循环代码块
:endfor
:for [{var1},{var2},...] in {listlist}
循环代码块
:endfor
:continue 跳回while循环的开始;继续循环。在 “:while” 或 “:for” 循环的内部,跳回循环开始的地方。
:break 跳至:endwhile;循环结束 。在 “:while” 或 “:for” 循环的内部,跳到相匹配的 “:endwhile” 或 “:endfor” 之后的命令。
执行单个表达式
执行一个vim命令行命令
:execute “vim命令” . 参数
参数可以是变量,如果不是变量,必须单引号引起来
例如::execute “! “. ‘ls -la’
执行一个普通模式命令(快捷操作)
参数不能是表达式,可以和:execute 配合使用来带参数
:normal vim命令
例如::normal gt
使用函数
一个函数可以被:call命令调用,参数列表要用括号括起来,并用逗号分割
:call search(“Date:”,”W”)
自定义函数
:function {name}({var1}, {var2}, ...)
{函数体}
:endfunction
# 函数名必须以大写字母开始
# 要重定义一个已经存在的函数,在 "function" 命令后加上 !
# echo 可以输出函数结果 echo 函数