1

我正在构建一个自定义的 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 个键)传递给函数?

4

1 回答 1

2

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

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

于 2017-01-03T07:14:57.727 回答