如何在Vim脚本中展平嵌套列表?

时间:2012-08-11 06:55:03

标签: list nested vim expand

我发现一些Vim列表功能无法正常工作。 例如:

let list0 = [1, [1, 2]]
echo count(list0, 1)

它会返回1,但我希望它返回2。所以我认为这些函数不能深入到嵌套列表中,只能在第一级工作。

我想在这里我应该将嵌套列表扩展为这样的普通列表:

list0 = [1, 1, 2]

如何展平嵌套列表?

2 个答案:

答案 0 :(得分:2)

" Code from bairui@#vim.freenode
" https://gist.github.com/3322468
function! Flatten(list)
  let val = []
  for elem in a:list
    if type(elem) == type([])
      call extend(val, Flatten(elem))
    else
      call add(val, elem)
    endif
    unlet elem
  endfor
  return val
endfunction

此处unlet elem是必要的。由于elem变量正在更改,因此它是列表项或列表,VimL不支持将列表项分配给列表,反之亦然。

答案 1 :(得分:0)

我建议vital.vim的Data.List.flatten作为另一个答案; D

https://github.com/vim-jp/vital.vim