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

时间:2013-09-24 11:38:04

标签: vim

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

有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:3)

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

解决此问题的一种方法是通过:autocmd评估变量的内容:execute

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

替代

或者您可以将g:errorMessageString定义为列表,在每次调用时附加函数参数,并仅定义:autocmd一次,但随后将其:echomsg在所有List元素上。