Vim学习——编写Vim脚本基础

声明:此篇为https://vim.linuxsong.org vim中文手册整理
入门案例:

:let i = 1
:while i < 5
:	echo "Hello,World!" i
:	let i += 1
:endwhile

冒号: 字符非必须,只有键入命令时需要,编写Vim脚本时可以省略

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. 表达式

   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"
	同一层的表达式从左到右进行分析。

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

你可能感兴趣的:(Vim,scripts)