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 函数
