JSRUN 用代码说话

条件语句

编辑教程

条件语句

每种编程语言都有产生分支流程的方法,在Vimscript中,这是用if语句实现的。

if语句是Vimscript中产生分支的基本方法。这里没有类似Ruby中的unless语句, 所以代码中所有的判断都需要用if实现。

在谈论Vim的if语句之前,我们需要花费额外的时间讲讲语法,这样可以在同一页里讲完它。

多行语句

有时你在一行里写不下所需的Vimscript。在讲到自动命令组时,我们已经遇到过这样的例子了。 这里是我们之前写过的代码:

:augroup testgroup
:    autocmd BufWrite * :echom "Baz"
:augroup END

在理想的情况下,你可以分开成三行来写。但在手工执行命令的时候,这样写就太冗长了。 其实,你可以用管道符(|)来隔开每一行。执行下面的命令:

:echom "foo" | echom "bar"

Vim会把它当作两个独立的命令。如果你看不到两行输出,执行:messages查看消息日志。

在本书的剩余部分,当你想手工执行一个命令,却对输入新行和冒号感到心烦时,试试用管道隔开, 在一行里写完。

If的基本用法

现在让我们回到正题上来,执行下面的命令:

:if 1
:    echom "ONE"
:endif

Vim将显示ONE,因为整数1是"truthy"。现在执行下面命令:

:if 0
:    echom "ZERO"
:endif

Vim将显示ZERO,因为整数0是"falsy"。让我们看看对字符串是怎么处理的。执行下面命令:

:if "something"
:    echom "INDEED"
:endif

结果可能让你吃惊。Vim不会把非空字符串当作"truthy",所以什么也没有显示。

让我们打破沙锅问到底。执行下面的命令:

:if "9024"
:    echom "WHAT?!"
:endif

这次Vim显示了!为什么会这样?

为了搞懂发生了什么,执行下面三个命令:

:echom "hello" + 10
:echom "10hello" + 10
:echom "hello10" + 10

第一个命令使得Vim输出10,第二个命令输出20,第三个则又一次输出10!

在探究了所有的命令后,对于Vimscript我们可以得出结论:

如有必要,Vim将强制转换变量(和字面量)的类型。在解析10 + "20foo"时,Vim将把"20foo"转换成一个整数(20)然后加到10上去。
以一个数字开头的字符串会被强制转换成数字,否则会转换成0
在所有的强制转换完成后,当if的判断条件等于非零整数时,Vim会执行if语句体。

Else 和 Elseif

Vim,像Python一样,支持"else"和"else if"分句。执行下面的命令:

:if 0
:    echom "if"
:elseif "nope!"
:    echom "elseif"
:else
:    echom "finally!"
:endif

Vim输出finally!,因为前面的判断条件都等于0,而0代表falsy。

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟