0

任何帮助,将不胜感激。我正在使用以下内容:

let g:usefulstatusline_normal=call(exe, ['hi StatusLine'], {})

我得到:

E15: Invalid expression: call(exe, ['hi StatusLine'], {})

我究竟做错了什么?这可能是显而易见的,我知道。

我想要实现的是获取当前颜色方案的状态线的颜色和内容并将其包含在变量中。以便我以后可以重新使用它。

任何帮助表示赞赏,也将不胜感激有关如何以更好的方式实现这一目标的任何提示。

如果您想要完整代码,请访问此文件:https ://github.com/Greduan/vim-usefulstatusline/blob/master/autoload/usefulstatusline_colorize.vim

现在忽略顶部,它只是为了测试目的。:)

4

2 回答 2

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
于 2013-01-30T03:57:07.060 回答
4

请注意,为了查询高亮组的属性,您不需要解析:hi命令的输出(无论如何,这只能作为最后的手段)。您可以使用hlID()synIDattr()功能的组合来做到这一点:

:echo synIDattr(synIDtrans(hlID('StatusLine')), 'bg')
于 2013-01-30T07:50:31.957 回答