将字典传递给viml中的函数

Passing a dictionary to a function in viml

我正在构建一个自定义 unite.vim 源 选择之一应该能够调用一个可以接受字典的函数

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 个键)传递给函数?

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

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