vim消息历史记录中有多条错误消息

vim消息历史记录中有多条错误消息,vim,Vim,我试图通过将启动时间错误传递给vim的错误控制系统来维护错误消息链。为此,我的.vimrc中有以下函数: " Local error message function function! LocalError(err) " Update the errorMessageString let g:errorMessageString = a:err autocmd VimEnter * echohl ErrorMsg | echomsg g:errorMessageStri

我试图通过将启动时间错误传递给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.
(严重错误):无法访问。
(严重错误):无法访问。
有什么想法吗


谢谢。

问题在于,全局
g:errorMessageString
变量在每次函数调用时都会被覆盖,但定义的
:autocmd
s只会在以后使用全局变量的当前值执行

解决此问题的一种方法是通过
:execute
:将变量的内容计算到
:autocmd

execute 'autocmd VimEnter * echohl ErrorMsg | echomsg' string(g:errorMessageString) '| echohl None'
可供替代的
或者,您可以将
g:errorMessageString
定义为一个列表,在每次调用中附加函数参数,并且只定义一次
:autocmd
,然后将其
:echomsg
覆盖在所有列表元素上。

“下面是它看起来像“vs.”但它看起来像什么?”??想澄清一下吗?抱歉,这里有个打字错误。编辑以使其清晰。谢谢你指出这一点。啊!伟大的范围,我完全搞砸了。现在它起作用了。我使用了“执行”,现在应该这样做。虽然“列表”方法看起来更干净。非常感谢你!