任何帮助将不胜感激。我正在使用以下内容:
let g:usefulstatusline_normal=call(exe, ['hi StatusLine'], {})
我得到了:
E15: Invalid expression: call(exe, ['hi StatusLine'], {})
我做错了什么?我知道这可能是显而易见的事情。
我想要实现的是获取当前colorscheme的状态行的颜色和内容并将其包含在变量中。所以我以后可以重复使用它。
任何帮助都表示赞赏,同样,任何有关如何以更好的方式实现这一目标的提示也将受到赞赏。
如果您需要完整代码,请访问此文件:https://github.com/Greduan/vim-usefulstatusline/blob/master/autoload/usefulstatusline_colorize.vim
现在忽略顶部,它仅用于测试目的。 :)
答案 0 :(得分:4)
这里的问题是你需要:highlight command
的输出。与vim中的函数不同,该函数返回一个值,该值可以分配给表达式左侧的某些内容,此命令会回显其输出。在这种情况下,您需要暂时将输出重定向到变量,然后恢复正常输出,如下所示:
redir => g:usefulstatusline_normal
silent! exec 'hi StatusLine'
redir END
请注意,:highlight
命令可以输出的可能值是单行上不存在的突出显示组的错误,或换行符然后是输出,因此您需要做更多的工作而不仅仅是上面的例子:
" Returns: hl group value or '' on nonexistent highlight group
" Usage: let foo = GetHL('StatusLine')
function! GetHL(grp)
redir => hlOutput
silent! exec 'hi '.a:grp
redir END
let hlVal = matchstr(hlOutput, '\v%(\nStatusLine\s+xxx\s+)@<=.*')
return hlVal
endfunction
答案 1 :(得分:4)
请注意,为了查询突出显示组的属性,您不需要解析:hi
命令的输出(这应该只作为最后的手段,无论如何)。您可以结合使用hlID()
和synIDattr()
函数来执行此操作:
:echo synIDattr(synIDtrans(hlID('StatusLine')), 'bg')