Vimscript编程指南

数值

现在是时候来看看在vimsrcipt里可以使用的数据类型。现在我们先看看Vim的数值类型。

Vimscript有两种数值类型:整数和浮点数。整数是一个32字节的有符号整数。浮点数很显然是一个定点浮点数。

数据格式

你可以用几种不同的方式来表示数值。运行下面的命令:


     :echom 100

很显然,Vim会输出“100”,现在运行下面的命令:


     :echom 0xff

这次Vim会输出“255”.你可以用在一个数值之前加上0x或者0X来表示十六进制数。运行下面的命令:


     :echom 010

你也可以用0作为前缀来表示一个八进制数。但是对于这个用法要小心点,因为这种方式比较容易犯错。运行下面的命令:


     :echom 017
     :echom 019

对于第一个命令Vim会输出“15”,因为“17”在八进制里的值是“15”.对于第二条命令,Vim把它当作十进制数来处理,即使它是以0开始的,但是它不是一个有效的八进制数。

因为vim在这种情况下会默认取错的值,所以我比较推荐的方式是在vim里尽量不要用八进制数。

浮点数

浮点数也可以用多种格式来表示。运行下面的命令:


     :echo 100.1

注意我们在这里用的是echo而不是常用的echom。后面我们会解释为什么要这样做的。Vim会输出“100.1”,毫无意外。你也可以用指数表达式来表示浮点数。运行下面的命令:


     :echo 5.45e+3

这次会输出“5450.0”。你也可以用复数作为指数,运行下面的命令:


     :echo 15.45e-2

这次vim会输出“0.1545”。

指数签名的+和-是可选的,如果指数前面没有符号的话,那么它的值默认就是正数。运行下面的命令:


     :echo 15.3e9

Vim会输出“1.53e10”,这个和之前的值是等效的。不过e前面的数字里的“.”是不能省略的,即使它是一个整数,运行下面的命令,vim会报错的:


     :echo 5e10

强制类型转换

当你在一个算术表达式,比较表达式,或者其他表达式里同时用到整数和浮点数时,Vim会把整数转换成浮点数,最终返回一个浮点数的结果。运行下面的命令:


     :echo 2 * 2.0

Vim会输出“4.0”。

除法

当两个整数相除时,余数会被丢弃掉。运行下面的命令:


     :echo 3/2
 Vim会输出“1”。如果你想要vim进行浮点数除法,那么就需要其中一个数是浮点型的,这样的话,vim会把另外一个强制转换成浮点型。运行下面的命令:

     :echo 3 / 2.0

vim会输出“1.5”,这里3会被强制转换成一个浮点数,然后就会进行浮点数除法运行。

练习

  • 阅读:help Float。什么情况下浮点数在vimscript里是无效的呢?
  • 阅读:help floating-point-precision。当你写一个vim插件来处理浮点数时,精度有什么意义呢?