2017-01-02 50 views
1

我建立一个自定义的unite.vim源的选择之一应该能够调用可以接受dictonary传递一个字典的功能viml

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个键)的功能?

+2

@at谁投了“题外话理由”:这个问题是完全的话题,因为它是一个VimL编程问题。 –

+0

你确定你使用':echo'而不是':echom'吗? – romainl

+0

当出现这样的错误时,Vim通常会打印出上下文。 Vim提到哪一行? –

回答

1

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

因此,我怀疑与构建动作命令类似的问题。我不确定这种nodeInfo数据的类型,但我怀疑是字典。如果这确实是一本字典,你必须建立一个能与action__command字典词条:'call DeleteNode(' . string(nodeInfo) .')',或者你也可以使用新的局部模板:h Partial,IIRC)如果您的Vim的版本是不够最近(7.4.1558+ ),如果执行此条目的代码也支持funcrefs。他们会更易于使用,但明确不能移植到Vim的7.3也不VIM 7.4.9xx ...

+0

':echo'需要字符串,数字,字典和列表。它是':echom',限于字符串并抛出'E730/E731'。 – romainl

+0

@romainl。确实。你是对的。我的错。 –

+0

要做到这一点是正确的,但不知道结果是什么问题。当我试图传递整个字典时,会显示错误。但是我最终只是修改了代码,只传递了我真正需要的两个键。有点杂乱,但它的作品,并给我我所需要的。谢谢! – mhartington