×

vi 命令手册

vi/vim 命令大全

vim 命令手册

Vim 关于Vim 安装Vim 用法Vim 配置vim 配置.vimrc方案vim 配置.vimrc方案1vim 配置.vimrc方案2Vim 文件合并Vim 技巧和建议Vim 插件Vim 参阅

Vimscript 编程参考

Vimscript 前言Vimscript 鸣谢Vimscript 预备知识Vimscript 打印信息Vimscript 设置选项Vimscript 基本映射Vimscript 模式映射Vimscript 精确映射Vimscript LeadersVimscript 编辑你的Vimrc文件Vimscript AbbreviationsVimscript 更多的MappingsVimscript 锻炼你的手指本地缓冲区的设置和映射Vimscript 自动命令Vimscript 本地缓冲区缩写Vimscript 自动命令组Operator-Pending 映射Operator-Pending 更多映射Vimscript 状态条Vimscript 负责任的编码Vimscript 变量Vimscript 变量作用域Vimscript 条件语句Vimscript 比较Vimscript 函数Vimscript 函数参数Vimscript 数字Vimscript 字符串Vimscript 字符串函数Vimscript Execute命令Vimscript Normal命令Vimscript 执行normal!Vimscript 基本的正则表达式Grep 运算符Operator 第1部分Grep 运算符Operator 第2部分Grep 运算符Operator 第3部分Vimscript 列表Vimscript 循环Vimscript 字典Vimscript 切换Vimscript 函数式编程Vimscript 路径Vimscript 创建一个完整的插件Vimscript 基本插件配置方式用Pathogen配置插件Vimscript 检测文件类型Vimscript 基本语法高亮Vimscript 高级语法高亮Vimscript 基本折叠Vimscript 高级折叠Vimscript 段移动原理Vimscript Potion段移动Vimscript 外部命令Vimscript 自动加载Vimscript 文档Vimscript 发布Vimscript 还剩下什么?

Vimscript 条件语句


每种编程语言都有产生分支流程的方法,在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。

练习

来一杯啤酒,安抚自己因Vim中的字符串强制转换而受伤的心。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)