将字典传递给viml中的函数

时间:2017-01-02 22:11:47

标签: vim viml

我正在建立一个自定义的unite.vim源,其中一个选项应该能够调用一个可以接受dictonary的函数

function! s:source.gather_candidates(args, context) abort "{{{
  let l:nodeInfo = a:context.file
  return [
        \{
        \ 'word': 'delete the current node',
        \ 'kind': 'command',
        \ 'source': s:source.name,
        \ 'action__command': 'call DeleteNode(' . l:nodeInfo .')',
        \ }]
endfunction "}}}

然后再测试一下,回复字典

function! DeleteNode(node) abort "{{{
  let l:currentNode = a:node
  echo l:currentNode
endfunction "}}}

但是当我尝试加载我的源代码时,我得到了

Vim(return):E731: using Dictionary as a String

如何将字典(大约24个键)传递给函数?

1 个答案:

答案 0 :(得分:1)

编辑:正如romainl指出的那样,您应该能够将:echo与字典一起使用,而不像:echomessage。在后一种情况下,您需要使用string()函数对字典进行字符串化。

因此我怀疑构建动作命令存在类似的问题。我不确定这个nodeInfo数据的类型,但我怀疑是一本字典。如果这确实是字典,您必须使用action__command构建'call DeleteNode(' . string(nodeInfo) .')'字典条目,或者您也可以使用新的 Partials ({{ 1}},IIRC)如果您的Vim版本足够新(7.4.1558+),并且执行此条目的代码也支持funcref。它们使用起来要简单得多,但最终不能移植到Vim 7.3,也不能移植到vv 7.4.9xx ...