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