LV02-vimscript-05-语句.md

本文主要是vimscript一些基础知识和操作的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows windows11
Ubuntu Ubuntu16.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
点击查看本文参考资料
点击查看相关文件下载
--- ---

一、vim语句

一般来说,作为一门编程语言,都要有语句吧。不过vimscript的语句都是一条命令,这与Shell很类似。接下来就来了解一下vim中的语句。这里有一份官方参考文档待查收:VIM: eval

二、基本语法

1. 条件语句

1.1 一般形式

vimscript中,条件语句的一般格式如下:

  • if...
1
2
3
if expression
command
endif
  • if...else...
1
2
3
4
5
if expression
command1
else
command2
endif
  • if...elseif...
1
2
3
4
5
6
7
if expression
command1
elseif
command2
else
command3
endif

【注意】if后边的表达式不像C或者Shell那样需要用()或者[]之类的括起来,vimscriptif后边表达式直接写,只要表达式可以判断真伪即可。

1.2 if...

  • expression为数字

text.vim文件中添加以下内容:

1
2
3
4
5
6
if 1
echo "true"
endif
if 0
echo "false"
endif

在命令模式中执行:source test.vim可以看到输出结果如下:

1
2
true

可以发现,只有if 1进行了输出,if 0为假,并未输出而是直接结束。

  • expression为字符串

text.vim文件中添加以下内容:

1
2
3
4
5
6
7
8
9
if "string1"
echo "string1"
endif
if 'string1'
echo "string1"
endif
if "12345"
echo "12345"
endif

在命令模式中执行:source test.vim可以看到输出结果如下:

1
12345

可以发现,只有if "12345"进行了输出,其他的都未进行输出。这是为什么呢?接下来我们来验证一下,对于vim来说,它对含有数字的字符串会怎样处理。

text.vim文件中添加以下内容,为什么要做这几个实验呢?一来是网上就这么说的,而来,自己猜测一下,if语句判断的是真或者假,对于计算机而言,只有1或者0,可以想象,最后字符串应该是被转化成了整数,可是具体转化成了多少,我们却不得而知,接下来就按照网上的测试进行一个验证:

1
2
3
4
echo "string" + 1
echo "1string" + 1
echo "string1" + 1
echo "12345" + 1

在命令模式中执行:source test.vim可以看到输出结果如下:

1
2
3
4
1
2
1
12346

可以发现,当字符串与整数相加减时,**以一个数字开头的字符串会被强制转换成数字,否则会转换成0**,在所有的强制转换完成后,当if的判断条件等于非零整数时,vim才会执行if语句。

1.3 if...else...

text.vim文件中添加以下内容:

1
2
3
4
5
if 0
echo "true"
else
echo "false"
endif

在命令模式中执行:source test.vim可以看到输出结果如下:

1
false

1.4 if...elseif...

text.vim文件中添加以下内容:

1
2
3
4
5
6
7
if 0
echo "if"
elseif "string"
echo "elseif"
else
echo "else finally"
endif

在命令模式中执行:source test.vim可以看到输出结果如下:

1
else finally

2. 循环

作为一门脚本编程语言,无可厚非,循环是一定要有的,接下来就来看一看Vinscriupt中的循环 。vimscript中的循环似乎不像C那样丰富多彩,似乎我就只见过以下几种,后续有在遇到,再将其一起写在这里。

2.1 for循环

2.1.1 一般格式

1
2
3
for {var} in {object}
command
endfo[r]

【注意】

(1){var}在之前可以没有定义,这里可以直接使用。

(2){object} 可以是 listblob 。变量 {var}设为每个项目的值。如果循环里某个命令出错,从 endfor之后继续执行。

2.1.2 使用实例

text.vim文件中添加以下内容:

1
2
3
4
5
6
let sum = 0
for var in [1, 3, 6, 9]
echo "var="var
let sum += var
endfor
echo "sum="sum

在命令模式中执行:source test.vim可以看到输出结果如下:

1
2
3
4
5
var= 1
var= 3
var= 6
var= 9
sum= 19

2.2 while循环

2.1.1 一般格式

1
2
3
while expression
command
endwhile

2.1.2 使用实例

text.vim文件中添加以下内容:

1
2
3
4
5
6
7
let num = 1
let sum = 0
while num <= 10
let sum +=num
let num+=1
endwhile
echo "sum="sum"\nnum="num

在命令模式中执行:source test.vim可以看到输出结果如下:

1
2
sum= 55 
num= 11

3. 循环中的命令

vimscript中,还有一些命令经常在循环中使用,这里罗列几个,由于其他的我还没有遇到过,所以暂时也不是很理解什么意思,后边遇到了再总结到一起。

3.1 con[tinue]

whilefor 循环的内部,跳回循环开始的地方。简单来说就是直接进行下一次的循环,其后的语句不再执行。详情可查看:VIM: eval - continue

例如:在text.vim文件中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
let num = 1
let sum = 0
while num <= 10
if num % 2 == 0
let num+=1
continue
endif
echo "num="num
let sum +=num
let num+=1
endwhile
echo "sum="sum"\tnum="num

在命令模式中执行:source test.vim可以看到输出结果如下:

1
2
3
4
5
6
num= 1
num= 3
num= 5
num= 7
num= 9
sum= 25 num= 11

3.2 brea[k]

whilefor 循环的内部,跳到相匹配的endwhileendfor之后的命令。简单来说就是直接结束本层循环,其后的语句不再执行。详情可查看:VIM: eval - break

例如:在text.vim文件中添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
let num = 1
let sum = 0
while num <= 10
if num == 5
break
endif
echo "num="num
let sum +=num
let num+=1
endwhile
echo "sum="sum"\tnum="num

在命令模式中执行:source test.vim可以看到输出结果如下:

1
2
3
4
5
num= 1
num= 2
num= 3
num= 4
sum= 10 num= 5