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変数が上書きされることですが、定義された:autocmds は後でのみ実行され、その時点でのグローバル変数の現在の値が使用されます。

これを修正する 1 つの方法は、変数の内容:autocmdviaに評価すること:executeです。

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

または、 Listg:errorMessageStringとして定義し、呼び出しごとに関数引数を追加し、1 回だけ定義してから、すべての List 要素に適用することもできます。:autocmd:echomsg

于 2013-09-24T12:35:17.403 に答える