1

我试图通过将启动时间错误传递给 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.

有任何想法吗?

谢谢。

4

1 回答 1

3

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

解决此问题的一种方法是将变量的内容评估到:autocmdvia :execute

execute 'autocmd VimEnter * echohl ErrorMsg | echomsg' string(g:errorMessageString) '| echohl None'

选择

或者您可以定义g:errorMessageStringList,在每次调用时附加函数参数,并:autocmd仅定义一次,然后将其:echomsg用于所有 List 元素。

于 2013-09-24T12:35:17.403 回答