我试图通过将启动时间错误传递给vim的错误控制系统来维护错误消息链。为此,我在.vimrc中有以下功能:
" Local error message function
function! LocalError(err)
" Update the errorMessageString
let g:errorMessageString = a:err
autocmd VimEnter * echohl ErrorMsg | echomsg g:errorMessageString | echohl None
endfunction
因此,可以通过流中的任何其他脚本访问此函数。因此,每个人都使用稍微不同的消息字符串调用此函数。
然而,一旦我使用:messages命令在vim中显示它们,我就能看到多行消息字符串,但它们都是相同的。
好像消息缓冲区总是被提供给函数的最后一个字符串覆盖。我做错了什么?
以下是它的样子:
<banana> (SEVERE_ERROR): Unable to access.
<foo> (SEVERE_ERROR): Unable to access.
然而它看起来像这样:
<foo> (SEVERE_ERROR): Unable to access.
<foo> (SEVERE_ERROR): Unable to access.
有什么想法吗?
感谢。
答案 0 :(得分:3)
问题是全局g:errorMessageString
变量在每次函数调用时都会被覆盖,但定义的:autocmd
只会在稍后使用全局变量的当前值执行。
解决此问题的一种方法是通过:autocmd
评估变量的内容到:execute
:
execute 'autocmd VimEnter * echohl ErrorMsg | echomsg' string(g:errorMessageString) '| echohl None'
或者您可以将g:errorMessageString
定义为列表,在每次调用时附加函数参数,并仅定义:autocmd
一次,但随后将其:echomsg
在所有List元素上。