将字典传递给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...
我正在构建一个自定义 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...