Vim技能修煉教程(15) - 時間和日期相關函數
Vimscript武器庫
前麵我們走馬觀花地將Vimscript的大致語法過了一遍。下麵我們開始深入看一下Vimscript都給我們準備了哪些武器。如果隻用這些武器就夠了,那麼就太好了,隻用Vimscript會導致最佳的兼容性。否則不管是用:python還是使用擴展庫,都給可移植性帶來麻煩。
隨著Vim的廣泛移植,Vimscript帶來的可移植性還是很可觀的。這是一門跨相當多平台可用的語言。
之前我們為了區分normal命令和ex命令,在腳本中使用ex命令的前麵都加上了":"前綴。從這講開始,凡是寫在腳本中的ex命令均省略冒號,因為出現在腳本中的一定都是ex命令,normal命令反而要靠normal命令來執行。
時間和日期相關函數
柿子撿軟的捏,我們先從規模最小的時間和日期函數開始。
- localtime(): 返回當前時間的數字。這個值是從1970年1月1日0時開始計算的秒數。
- strftime({格式字符串},[時間值]}): 將時間數字轉化成字符串。這個函數是不具備可移植性的,其格式受具體使用的C函數庫的限製。這個函數並不是所有的Vim上都有的,所以需要在使用前判斷是否存在。
- getftime({文件名}): 獲取一個文件的最後修改時間。返回是個整數,與localtime()一樣。
例:
function GetLocalTime()
let l:time= localtime()
if exists("*strftime")
return strftime("%c",l:time)
else
return l:time
endif
endfunction
再比如,我們用localtime()來模擬隨機數:
function GetRand()
let l:seed = localtime()
let l:value = l:seed % 100
return l:value / 100.0
endfunction
reltime功能
如果在編譯時提供了+reltime選項,那麼將額外提供幾個功能:
- reltime(): 返回一個更精確地表示時間的值,格式如這樣:[1500367300, 966070],是一個列表。
- reltimestr(): 返回reltime()值的文字表示,可以用於顯示。
- reltimefloat(): 將reltime()的值轉換成浮點數。如:1500367382.226327。
reltime的重要性在於,是我們用於性能測試的重要手段。
例,我們想測量一下MyFunction執行用了多長時間:
let start = reltime()
call MyFunction()
let seconds = reltimefloat(reltime(start))
有了reltime,我們的隨時數函數可以寫得更精確一點:
function GetRand2()
let l:seed = reltimefloat(reltime())
let l:value = float2nr(l:seed * 100000) % 100
return l:value / 100.0
endfunction
最後更新:2017-07-18 20:35:06