×

vi 命令手册

vi/vim 命令大全

vim 命令手册

Vim 关于Vim 安装Vim 用法Vim 配置vim 配置.vimrc方案vim 配置.vimrc方案1vim 配置.vimrc方案2Vim 文件合并Vim 技巧和建议Vim 插件Vim 参阅

Vimscript 编程参考

Vimscript 前言Vimscript 鸣谢Vimscript 预备知识Vimscript 打印信息Vimscript 设置选项Vimscript 基本映射Vimscript 模式映射Vimscript 精确映射Vimscript LeadersVimscript 编辑你的Vimrc文件Vimscript AbbreviationsVimscript 更多的MappingsVimscript 锻炼你的手指本地缓冲区的设置和映射Vimscript 自动命令Vimscript 本地缓冲区缩写Vimscript 自动命令组Operator-Pending 映射Operator-Pending 更多映射Vimscript 状态条Vimscript 负责任的编码Vimscript 变量Vimscript 变量作用域Vimscript 条件语句Vimscript 比较Vimscript 函数Vimscript 函数参数Vimscript 数字Vimscript 字符串Vimscript 字符串函数Vimscript Execute命令Vimscript Normal命令Vimscript 执行normal!Vimscript 基本的正则表达式Grep 运算符Operator 第1部分Grep 运算符Operator 第2部分Grep 运算符Operator 第3部分Vimscript 列表Vimscript 循环Vimscript 字典Vimscript 切换Vimscript 函数式编程Vimscript 路径Vimscript 创建一个完整的插件Vimscript 基本插件配置方式用Pathogen配置插件Vimscript 检测文件类型Vimscript 基本语法高亮Vimscript 高级语法高亮Vimscript 基本折叠Vimscript 高级折叠Vimscript 段移动原理Vimscript Potion段移动Vimscript 外部命令Vimscript 自动加载Vimscript 文档Vimscript 发布Vimscript 还剩下什么?

Vimscript 字典


我们讲到的最后一种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 foo

Vim显示{'a': 100, 'b': 200}。赋值和添加一个新项的方式是一样的。

移除项

有两种方法可以移除字典中的项。执行下面的命令:

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

Vim显示{}100remove函数将移除给定字典的给定键对应的项,并返回被移除的值。 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显示100default,如同列表版本的get函数.

你也可以检查给定字典里是否有给定的键。执行这个命令:

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

Vim显示10。不要忘了,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().


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)