首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VimL:正确使用` `call()`?我一直收到错误

VimL:正确使用` `call()`?我一直收到错误
EN

Stack Overflow用户
提问于 2013-01-30 09:41:17
回答 2查看 139关注 0票数 0

任何帮助都将不胜感激。我使用的是以下内容:

代码语言:javascript
复制
let g:usefulstatusline_normal=call(exe, ['hi StatusLine'], {})

我得到了:

代码语言:javascript
复制
E15: Invalid expression: call(exe, ['hi StatusLine'], {})

我做错了什么?我知道这可能是显而易见的事情。

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

任何帮助都是值得感谢的,任何关于如何以更好的方式实现这一目标的提示也将受到感谢。

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-30 11:57:07

这里的问题是您想要:highlight command的输出。与vim中的函数不同,vim中的函数返回的值可以分配给表达式左侧的值,而此命令回显其输出。在这种情况下,您需要暂时将输出重定向到变量中,然后恢复正常输出,如下所示:

代码语言:javascript
复制
redir => g:usefulstatusline_normal
silent! exec 'hi StatusLine'
redir END

注意,:highlight命令可以输出的可能值要么是单行上不存在的高亮显示组的错误,要么是换行符,然后是输出,因此您需要做一些工作,而不仅仅是上面的示例:

代码语言:javascript
复制
" 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
票数 4
EN

Stack Overflow用户

发布于 2013-01-30 15:50:32

请注意,对于查询高亮显示组的属性,您不需要解析:hi命令的输出(无论如何,这应该是在万不得已的情况下才能完成)。您可以结合使用hlID()synIDattr()函数来完成此操作:

代码语言:javascript
复制
:echo synIDattr(synIDtrans(hlID('StatusLine')), 'bg')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14595298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档