当前位置:K88软件开发文章中心编程工具Vim → 文章内容

Vimscript 字典

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-24 10:54:01

由 Loen 创建, 最后一次修改 2016-02-24 我们讲到的最后一种Vimscript类型将是字典。 Vimscript字典类似于Python中的dict,Ruby中的hash,和Javascript中的object。字典用花括号创建。值是异质的,但键会被强制转换成字符串。就是这么简单,你没想到吧?执行这个命令::echo {'a': 1, 100: 'foo'}Vim显示{'a':1,'100':'foo'},这说明Vimscript的确把键强制转换为字符串,同时保留值不变。Vimscript避免了Javascript标准的蠢笨之处,允许你在字典的最后一个元素后留下一个逗号。 (译注:在Javascript的标准中,最后一个元素后面不能留下一个逗号。 但在Firefox里,留下那个逗号是允许的,不过这是Firefox的问题。) 执行下面的命令::echo {'a': 1, 100: 'foo',}Vim再次显示{'a':1,'100':'foo'}(译注:结尾小逗号不见了)。你应该_总是_在字典里留下一个多余的逗号,?_尤其_是当字典的定义跨越多行的时候,这样增加新项的时候将不容易犯错。索引查找字典中的一个值的语法跟大多数语言是一样的。执行这个命令::echo {'a': 1, 100: 'foo',}['a']Vim显示1。试试使用不是字符串的索引::echo {'a': 1, 100: 'foo',}[100]Vim会在查找之前把索引强制转换成字符串,因为键只能是字符串,这么做是合理的。当键仅由字母,数字和/或下划线组成时,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 fooVim显示{'a': 100, 'b': 200}。赋值和添加一个新项的方式是一样的。移除项有两种方法可以移除字典中的项。执行下面的命令::let test = remove(foo, 'a'):unlet foo.b:echo foo:echo testVim显示{}和100。remove函数将移除给定字典的给定键对应的项,并返回被移除的值。?unlet命令也能移除字典中的项,只是不返回值。你不能移除字典中不存在的项。试试执行这个命令::unlet foo["asdf"]Vim抛出一个错误。选择remove还是unlet很大程度上取决于个人偏好。如果非要我说,我推荐使用remove, 因为它比unlet更灵活。remove可以做任何unlet能做的事,反过来不成立。 所以选择remove可以一招鲜,吃遍天。字典函数就像列表,Vim有许许多多内置的字典函数。执行下面的命令::echom get({'a': 100}, 'a', 'default'):echom get({'a': 100}, 'b', 'default')Vim显示100和default,如同列表版本的get函数.你也可以检查给定字典里是否有给定的键。执行这个命令::echom has_key({'a': 100}, 'a'):echom has_key({'a': 100}, 'b')Vim显示1和0。不要忘了,Vimscript把0当作假而其他数字则是真。你可以用items从一个字典中获取对应的键值对,执行这个命令::echo items({'a': 100, 'b': 200})Vim将显示[['a',100],['b',200]]这样的嵌套列表。到目前为止,Vimscript字典_不一定_是有序的, 所以不要指望items的返回结果是有序的!你可以用keys返回字典的所有的键和values返回所有的值。它们的作用一如其名——你可以查一下。练习阅读:help Dictionary。看完它。注意大写D。阅读:help get().阅读:help has_key().阅读:help items().阅读:help keys().阅读:help values().

Vimscript 字典