列表

到目前为止,我们用过很多次变量了,但还没有讨论过聚合! Vim 主要有两种聚合类型,我们现在就来看看第一种:列表。

Vimscript 列表是有序的、多类型的元素集合。运行以下命令:

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

Vim 显示了这个列表。当然,列表是可以嵌套的。运行以下命令:

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

Vim 正确的显示了这个列表。

索引

Vimscript 列表的索引是从0开始的,你可以像平常一样获取元素。运行命令:

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

Vimscript 显示 [1, 2]。你也可以反方向使用索引,就如 Python 一样。试试命令:

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

Vim 显示 0。索引 -1 表示列表的最后一个元素,-2 表示倒数第二个元素,以此类推。

切片

Vim 列表也可以进行切片。这非常类似于 Python,但并不是完全一样!运行命令:

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

Vim 显示 ['a', 'b', 'c'] (索引为0,1,2的元素)。超出上边界也是安全的。试试命令:

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

Vim 显示了整个列表。

切片的索引可以是负数。试试命令:

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

Vim 显示 ['d', 'e'] (索引为-2,-1的元素)。

在进行切片的时候,你可以空着第一个索引表示“开头”,也可以空着最后一个索引表示“结尾”。 运行以下命令:

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

Vim 显示 ['a', 'b']['d', 'e']

和 Python 一样,Vimscript 也允许对字符串使用索引和进行切片。运行以下命令:

:echo "abcd"[0:2]

Vim 显示 abc。然而你不能对字符串使用负数索引。不过你还是可以在进行字符串切片时使用负数索引! 运行以下命令:

:echo "abcd"[-1] . "abcd"[-2:]

Vim 显示 cd (使用负数索引会静默处理,并得到一个空字符串)。

连结

你可以用 + 合并 Vim 列表。试试命令:

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

毋庸置疑,Vim 会显示 ['a', 'b', 'c']。这并没有可说的 —— Vimscript 列表和其他语言的相比,倒是出奇的一致。

列表函数

Vim 有许多内置函数供列表使用。运行以下命令:

:let foo = ['a']
:call add(foo, 'b')
:echo foo

Vim 会在列表 foo 后面添加 'b',显示为 ['a', 'b']。现在运行命令:

:echo len(foo)

Vim 显示 2,这是列表的长度。试试这些命令:

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

Vim 显示 adefaultget 函数获取列表指定索引的元素,如果索引超出范围,则会返回默认值。

运行命令:

:echo index(foo, 'b')
:echo index(foo, 'nope')

Vim 显示 1-1index 函数返回列表中指定项第一次出现的索引位置,如果不存在,则返回 -1

现在运行命令:

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

Vim 显示 a ba---b,和 123join 函数会把传入的列表合并为一个字符串,并用指定的分隔符分隔 (如果没指定,则为一个空格符),并竟可能把每个项强制转化成字符串。

运行以下命令:

:call reverse(foo)
:echo foo
:call reverse(foo)
:echo foo

Vim 显示 ['b', 'a'] 然后是 ['a', 'b']reverse 函数会把列表的顺序颠倒。

练习

阅读 :help List 所有的内容。注意 L 是大写的。

阅读 :help add()

阅读 :help len()

阅读 :help get()

阅读 :help index()

阅读 :help join()

阅读 :help reverse()

略读 :help functions 找找其他没有提及的与列表相关的函数。 运行 :match Keyword /\clist/ 高亮显示所有的 list,无论大小写,这样你可以轻松得找到想要的。

原文地址:http://learnvimscriptthehardway.stevelosh.com/chapters/35.html