Function 在vim状态行表达式中使用字典

Function 在vim状态行表达式中使用字典,function,dictionary,vim,expression,statusline,Function,Dictionary,Vim,Expression,Statusline,我想使用一个表达式(函数),它接受两个参数-数据和一个字典-作为状态行 这就是我正在尝试的: let &stl="%{Brick(statusbricks#ReportLinecount('raw'), { \ 'brick_color': 'LineNr', \ 'delimiter_position': 'right', \ 'delimiter_right': '❯' \ })}" 为什么会出现以下错误消

我想使用一个表达式(函数),它接受两个参数-数据和一个字典-作为状态行

这就是我正在尝试的:

let &stl="%{Brick(statusbricks#ReportLinecount('raw'), {
        \   'brick_color': 'LineNr',
        \   'delimiter_position': 'right',
        \   'delimiter_right': '❯'
        \ })}"
为什么会出现以下错误消息:

E722: Missing comma in Dictionary:
Press ENTER or type command to continue
E116: Invalid arguments for function Brick(statusbricks#ReportLinecount('raw'), {'brick_color': 'LineNr', 'delimiter_position': 'right', 'delimiter_right': '❯'
Press ENTER or type command to continue
E15: Invalid expression:
Brick(statusbricks#ReportLinecount('raw'), {'brick_color': 'LineNr', 'delimiter_position': 'right', 'delimiter_right': '❯'
Press ENTER or type command to continue
如果我在函数调用中删除字典,它就会通过。
即使我使用它作为一个没有空格的单行,我也会得到同样的错误。

要在
'statusline'
表达式中使用字典,可以使用
Funcref

例如,参数
使用字典对\u getplace
进行签名:

let g:Sign_getplaced = function('sign_getplaced', ['', {'group':'*'}])

然后在
'statusline'
表达式中使用
g:Sign\u getplace

如果将所有内容放在一行而不是使用反斜杠转义行继续符,会得到相同的结果吗?是的-根据您的评论更新问题。如果您使用不同的分隔符进行测试,如
?如果将字典存储到本地变量中,然后将其传递给函数,会有什么区别?字典本身似乎解析正确,从你在这里发布的内容中复制/粘贴。即使传递一个空的dict也无济于事。但将其存储到变量中,然后将var传递给函数是可行的。所以我想说,
%{}
不接受“内部”大括号。即使转义它们也没有帮助。我明白了-它不是更广泛的vimscript字符串插值语法的一部分,只是statusline<代码>计算“{”和“}”之间的表达式并替换结果。。嵌套
{}
上没有列出任何规则,但正如您所发现的,它似乎不合法。尽管自定义函数也可以定义为在
'statusline'
中使用。计算
Funcref
比计算自定义函数更快。