Vimscript 字典

2018-02-24 16:02 更新

我們講到的最后一種Vimscript類型將是字典。 Vimscript字典類似于Python中的dict,Ruby中的hash,和Javascript中的object。

字典用花括號創(chuàng)建。值是異質(zhì)的,但鍵會被強制轉(zhuǎn)換成字符串。就是這么簡單,你沒想到吧?

執(zhí)行這個命令:

:echo {'a': 1, 100: 'foo'}

Vim顯示{'a':1,'100':'foo'},這說明Vimscript的確把鍵強制轉(zhuǎn)換為字符串,同時保留值不變。

Vimscript避免了Javascript標準的蠢笨之處,允許你在字典的最后一個元素后留下一個逗號。 (譯注:在Javascript的標準中,最后一個元素后面不能留下一個逗號。 但在Firefox里,留下那個逗號是允許的,不過這是Firefox的問題。) 執(zhí)行下面的命令:

:echo {'a': 1, 100: 'foo',}

Vim再次顯示{'a':1,'100':'foo'}(譯注:結(jié)尾小逗號不見了)。你應該_總是_在字典里留下一個多余的逗號,?_尤其_是當字典的定義跨越多行的時候,這樣增加新項的時候?qū)⒉蝗菀追稿e。

索引

查找字典中的一個值的語法跟大多數(shù)語言是一樣的。執(zhí)行這個命令:

:echo {'a': 1, 100: 'foo',}['a']

Vim顯示1。試試使用不是字符串的索引:

:echo {'a': 1, 100: 'foo',}[100]

Vim會在查找之前把索引強制轉(zhuǎn)換成字符串,因為鍵只能是字符串,這么做是合理的。

當鍵僅由字母,數(shù)字和/或下劃線組成時,Vimscript也支持Javascript風格的"點"查找。 試試下面的命令:

:echo {'a': 1, 100: 'foo',}.a
:echo {'a': 1, 100: 'foo',}.100

兩種情況下,Vim都顯示了正確的元素。使用哪種索引字典的方式取決于你自己的偏好。

賦值和添加

像對待變量一樣賦值給字典中的項,就可以在字典中輕松地添加新的項。

:let foo = {'a': 1}
:let foo.a = 100
:let foo.b = 200
:echo foo

Vim顯示{'a': 100, 'b': 200}。賦值和添加一個新項的方式是一樣的。

移除項

有兩種方法可以移除字典中的項。執(zhí)行下面的命令:

:let test = remove(foo, 'a')
:unlet foo.b
:echo foo
:echo test

Vim顯示{}100。remove函數(shù)將移除給定字典的給定鍵對應的項,并返回被移除的值。?unlet命令也能移除字典中的項,只是不返回值。

你不能移除字典中不存在的項。試試執(zhí)行這個命令:

:unlet foo["asdf"]

Vim拋出一個錯誤。

選擇remove還是unlet很大程度上取決于個人偏好。如果非要我說,我推薦使用remove, 因為它比unlet更靈活。remove可以做任何unlet能做的事,反過來不成立。 所以選擇remove可以一招鮮,吃遍天。

字典函數(shù)

就像列表,Vim有許許多多內(nèi)置的字典函數(shù)。執(zhí)行下面的命令:

:echom get({'a': 100}, 'a', 'default')
:echom get({'a': 100}, 'b', 'default')

Vim顯示100default,如同列表版本的get函數(shù).

你也可以檢查給定字典里是否有給定的鍵。執(zhí)行這個命令:

:echom has_key({'a': 100}, 'a')
:echom has_key({'a': 100}, 'b')

Vim顯示10。不要忘了,Vimscript把0當作假而其他數(shù)字則是真。

你可以用items從一個字典中獲取對應的鍵值對,執(zhí)行這個命令:

:echo items({'a': 100, 'b': 200})

Vim將顯示[['a',100],['b',200]]這樣的嵌套列表。到目前為止,Vimscript字典_不一定_是有序的, 所以不要指望items的返回結(jié)果是有序的!

你可以用keys返回字典的所有的鍵和values返回所有的值。它們的作用一如其名——你可以查一下。

練習

閱讀:help Dictionary。看完它。注意大寫D。

閱讀:help get().

閱讀:help has_key().

閱讀:help items().

閱讀:help keys().

閱讀:help values().

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號