vim消息历史记录中有多条错误消息
我试图通过将启动时间错误传递给vim的错误控制系统来维护错误消息链。为此,我的.vimrc中有以下函数: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
" 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.”但它看起来像什么?”??想澄清一下吗?抱歉,这里有个打字错误。编辑以使其清晰。谢谢你指出这一点。啊!伟大的范围,我完全搞砸了。现在它起作用了。我使用了“执行”,现在应该这样做。虽然“列表”方法看起来更干净。非常感谢你!