条件语句

每个编程语言都有方法来实现条件分支,在 Vimscript 中就是 if 语句。 if 语句是 Vim 条件分支的核心。它并不像 Ruby 有 unless 语句, 所以在写代码时任何需要做判断的都由 if 来完成。

在我们讨论 Vim 的 if 语句前,我们需要稍微花点时间来讲讲语法,以便我们达成一致。

多行语句

有时候你不能刚好把一段 Vimscript 代码放到一行里面。我们在讲自动命令组的时候看到过。 下面是之前用过的一段代码:

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

你可以在 Vimscript 文件中写成分开的三行,这是最佳情况,但是手动运行命令的时候这样写就很麻烦了。 作为替代,你可以用管道字符(|)来分割每一行。运行以下命令:

:echom "foo" | echom "bar"

Vim 会把这个作为两个独立的命令。如果你没有看到两行内容出现,就用 :messages 来查看记录。

在本书后面的内容里,如果你想手动运行命令,但又不想费力的键入换行和冒号, 那就用管道分割,把它们全部放到一行里面。

基本 if 语句

既然我们已经处理完了这些内容,那么运行以下命令:

:if 1
:    echom "ONE"
:endif

Vim 会显示 ONE,因为整数 1 是“真”。现在试试这命令:

:if 0
:    echom "ZERO"
:endif

Vim 会显示 ZEOR,因为整数 0 是“假”。让我们看看字符串是怎么表现的。 运行命令:

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

结果可能让你惊讶。Vim 并不一定把非空字符串当做是“真”,所以不会显示任何东西!

让我进一步探索。运行命令:

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

这次 Vim 确实 显示了文本!发生了什么?

为了搞清楚发生了什么,运行以下三个命令:

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

第一个命令使 Vim 回显 10,第二个命令回显 20,而第三个又回显 10

在观察了所有这些命令后,我们可以得出一些关于 Vimscript 有理有据的结论:

else 和 elseif 语句

Vim,和Python一样,支持 “else” 和 “else if” 分句。运行以下命令:

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

Vim 回显 finally!,因为前面的条件语句里都相当于零,表示假。

练习

喝瓶啤酒聊以慰藉吧,先别管 Vim 强制把字符串转换为整数的行为。

原文地址:http://learnvimscriptthehardway.stevelosh.com/chapters/21.html