現在是時候開始深入討論你能用到的變量類型。首先從數值類型開始吧。
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段移動
- 外部命令
- 自動加載
- 文檔
- 發布
- 還剩下什么?