现在是时候开始深入讨论你能用到的变量类型。首先从数值类型开始吧。
Vimscript有两种数值类型:Number和Float。一个Number是32位带符号整数。一个Float是浮点数。
## 数字(Number)形式
你可以通过一些不同的方式设置Number的格式。执行下面的命令:
~~~
:echom 100
~~~
没什么好惊讶的 -- Vim显示`100`。现在执行下面的命令:
~~~
:echom 0xff
~~~
这次Vim显示`255`。你可以加`0x`或`0X`前缀来指定16进制的数字。现在执行下面的命令:
~~~
:echom 010
~~~
你也可以加`0`前缀来使用八进制。不过由于容易混淆,用的时候要保持头脑清醒。尝试执行下面的命令:
~~~
:echom 017
:echom 019
~~~
第一个命令中,Vim将打印出`15`,因为`17`在八进制中等于十进制的`15`。 在第二个命令中,Vim把数字的进制当作十进制,即使它以`0`开头,因为它不可能是一个八进制数字。
因为Vim会一声不吭地处理掉这样的错误,我建议尽量避免使用八进制数字。
## 浮点数(Float)格式
Float也可以用许多方式进行定制。执行下面的命令:
~~~
:echo 100.1
~~~
注意这里我们使用了`echo`而不是更常用的`echom`。待会我会解释为什么这样做(译注:当然你现在可以试试看)。
Vim如愿输出了`100.1`。你也可以指定指数形式。执行下面命令:
~~~
:echo 5.45e+3
~~~
Vim输出`5450.0`。也可以用负的指数。执行下面命令:
~~~
:echo 15.45e-2
~~~
Vim输出`0.1545`。在10的幂前面的`+`或`-`是可选的。如果没有,就默认为正数。执行下面的命令:
~~~
:echo 15.3e9
~~~
Vim将输出等价的`1.53e10`。小数点和小数点后面的数字是_必须要有_的。执行下面命令并看它为何出错:
~~~
:echo 5e10
~~~
## 强制转换
当你在运算,比较或其他操作中混合使用Number和Float类型,Vim将把Number转换成Float, 以Float格式作为结果。执行下面命令:
~~~
:echo 2 * 2.0
~~~
Vim输出`4.0`。
## 除法
在两个Number之间的除法中,余数会被丢弃。执行下面命令:
~~~
:echo 3 / 2
~~~
Vim输出`1`。如果你希望Vim使用浮点数除法,至少有一个数字必须是Float, 这样剩下的数字也会被转换成浮点数。执行下面命令:
~~~
:echo 3 / 2.0
~~~
Vim输出`1.5`。`3`被强制转换成一个浮点数,然后运行了普通的浮点数除法。
## 练习
阅读`:help Float`。什么情况下在Vimscript中不能用浮点数?
阅读`:help floating-point-precision`。这意味着你在写一个处理浮点数的Vim插件时需要注意什么?
- 前言
- 鸣谢
- 预备知识
- 打印信息
- 设置选项
- 基本映射
- 模式映射
- 精确映射
- Leaders
- 编辑你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 锻炼你的手指
- 本地缓冲区的选项设置和映射
- 自动命令
- 本地缓冲区缩写
- 自动命令组
- Operator-Pending映射
- 更多Operator-Pending映射
- 状态条
- 负责任的编码
- 变量
- 变量作用域
- 条件语句
- 比较
- 函数
- 函数参数
- 数字
- 字符串
- 字符串函数
- Execute命令
- Normal命令
- 执行normal!
- 基本的正则表达式
- 实例研究:Grep 运算符(Operator),第一部分
- 实例研究:Grep运算符(Operator),第二部分
- 实例研究:Grep运算符(Operator),第三部分
- 列表
- 循环
- 字典
- 切换
- 函数式编程
- 路径
- 创建一个完整的插件
- 旧社会下的插件配置方式
- 新希望:用Pathogen配置插件
- 检测文件类型
- 基本语法高亮
- 高级语法高亮
- 更高级的语法高亮
- 基本折叠
- 高级折叠
- 段移动原理
- Potion段移动
- 外部命令
- 自动加载
- 文档
- 发布
- 还剩下什么?