閱讀987 返回首頁    go 微軟 go windows


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

  上一篇:go  逃離北上廣之“逃到這裏”
  下一篇:go  Windows、Linux環境下搭建ngrok服務器