Vim中有两种可以存放元素的集合(容器),列表和字典。

列表(List)在Vim中是有序的,可以混合存放不同元素的集合。

Vim

1

:echo ['foo', 3, 'bar']

List是从下标0开始索引的,-1可以表示最后一个元素,-2表示倒数第二个元素。

Vim

1

2

3

:echo [0, [1, 2]][1]

:echo [0, [1, 2]][-2]

Vim的list支持切片操作(类似Python),包含头也包含尾。

Vim

1

2

3

4

5

6

7

8

9

10

11

:echo ['a', 'b', 'c', 'd', 'e'][0:2]

" ['a', 'b', 'c']

:echo ['a', 'b', 'c', 'd', 'e'][0:100000]

" 整个list

:echo ['a', 'b', 'c', 'd', 'e'][-2:-1]

['d', 'e']

:echo ['a', 'b', 'c', 'd', 'e'][:1] " ['a', 'b']

:echo ['a', 'b', 'c', 'd', 'e'][3:] " ['d', 'e']

类似Python一样,VimScript可以对String进行切片。

Vim

1

2

:echo "abcd"[0:2]

" abc

可以使用+连接两个list。

Vim

1

2

:echo ['a', 'b'] + ['c']

" ['a', 'b', 'c']

List的默认方法

List有很多build-in functions。

Vim

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

:let foo = ['a']

:call add(foo, 'b')

:echo foo

" ['a', 'b']

:echo len(foo)

" 2

:echo get(foo, 0, 'default')  " a

:echo get(foo, 100, 'default')  " default

:echo index(foo, 'b')  " 1

:echo index(foo, 'nope')  " -1

:echo join(foo)

:echo join(foo, '---')

:echo join([1, 2, 3], '')

" Vim displays a b, a---b, and 123.

:call reverse(foo)

:echo foo

:call reverse(foo)

:echo foo

" ['b', 'a'] and then ['a', 'b']

Dcitionaries

VimScript的字典(Dictionares)和Python的Dict,Ruby的hashes,JavaScript的objects很像。

字典用花括号表示,value可以是任意类型,但是key必须是strings

Vim

1

2

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

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

Vim可以处理字典最后的逗号,因此我们最好永远在字典的最后加一个逗号,尤其是在多行字典的时候,这样添加新的键值对不容易出错。

Vim

1

2

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

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

取出字典值的方式和其他的编程语言一样。如果下表不是string的话,会先转换成string

1

2

3

4

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

" 1

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

" foo

也可以使用点号。

Vim

1

2

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

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

添加新的key-value也和其他语言一样。

Vim

1

2

3

4

5

:let foo = {'a': 1}

:let foo.a = 100

:let foo.b = 200

:echo foo

" {'a': 100, 'b': 200}

remove函数可以删除某个键值对,并且返回被删除的值。unlet与它的功能一样,只是没有返回值。如果试图删除一个不存在的值,会发生错误。

Vim

1

2

3

4

5

6

:let test = remove(foo, 'a')

:unlet foo.b

:echo foo

:echo test

" {}, 100

字典有以下build-in functions,关于功能,请阅读:help.

  1. get()
  2. has_key()
  3. items()
  4. keys()
  5. values()