2017-01-02 54 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