当前位置:K88软件开发文章中心编程工具Vim → 文章内容

Vimscript 条件语句

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-24 10:53:43

由 Loen 创建, 最后一次修改 2016-02-24 每种编程语言都有产生分支流程的方法,在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":endifVim将显示ONE,因为整数1是"truthy"。现在执行下面命令::if 0: echom "ZERO":endifVim将_不_显示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 和 ElseifVim,像Python一样,支持"else"和"else if"分句。执行下面的命令::if 0: echom "if":elseif "nope!": echom "elseif":else: echom "finally!":endifVim输出finally!,因为前面的判断条件都等于0,而0代表falsy。练习来一杯啤酒,安抚自己因Vim中的字符串强制转换而受伤的心。

Vimscript 条件语句