声明:此篇为https://vim.linuxsong.org vim中文手册整理
入门案例:
:let i = 1
:while i < 5
: echo "Hello,World!" i
: let i += 1
:endwhile
冒号: 字符非必须,只有键入命令时需要,编写Vim脚本时可以省略
定义变量 :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
expr2 ? expr1 : expr1 if-then-else
expr3 || expr3 .. 逻辑或
expr4 && expr4 .. 逻辑与
expr5 == expr5 等于
expr5 != expr5 不等于
expr5 > expr5 大于
expr5 >= expr5 大于等于
expr5 < expr5 小于
expr5 <= expr5 小于等于
expr5 =~ expr5 匹配正规表达式
expr5 !~ expr5 不匹配正规表达式
expr5 ==? expr5 等于,忽略大小写
expr5 ==# expr5 等于,匹配大小写
等等 如上,? 忽略大小写,# 则匹配之
expr5 is expr5 相同的 List 实例
expr5 isnot expr5 不同的 List 实例
**算术**
expr6 + expr6 .. 数值加法或列表连接
expr6 - expr6 .. 数值减法
expr6 . expr6 .. 字符串连接
expr7 * expr7 .. 数值乘法
expr7 / expr7 .. 数值除法
expr7 % expr7 .. 数值求余
! expr7 逻辑非
- expr7 一元减法: 取反
+ expr7 一元加法: 原值
expr8[expr1] 字符串里的字节或者 List 的项目
expr8[expr1 : expr1] 字符串子串或 List 的子列表
expr8.name Dictionary 的项目
expr8(expr1, ...) 使用 Funcref 变量的函数调用
"string" 字符串常数,反斜杠有特殊含义
'string' 字符串常数,' 加倍
[expr1, ...] List
{expr1: expr1, ...} Dictionary
&option 选项值
(expr1) 嵌套表达式
variable 内部变量
va{ria}ble 带花括号的内部变量
$VAR 环境变量
@r 寄存器 'r' 的值
function(expr1, ...) 函数调用
func{ti}on(expr1, ...) 带花括号的函数调用
{args -> expr1} 匿名函数表达式
".." 标明这一层上的操作可以连接。比如:
&nu || &list && &shell == "csh"
同一层的表达式从左到右进行分析。
: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 函数