8

特定のイベントの後、Vim のステータスラインを非常に長く更新することは可能ですか?

もしそうなら、どうやってそれを行うのですか?

4

1 に答える 1

32

他の人がすでに指摘しているように、現在、ステータスラインに時限変更を使用することはできません。ただし、ステータスがデフォルトに戻る適切なイベントを選択できる場合は、運が良かった可能性があります。たとえば、ワークフローが次の場合:

  1. Esc通常モードに切り替えて、ショートカットを呼び出します
  2. ステータスラインで結果を確認し、挿入モードに戻って作業を続行します

次に、自動コマンドでイベントを使用して、通常モードでInsertEnterヒットしたときにステータスをデフォルトに変更できます。i

これは、おそらくニーズに合わせて変更できる小さな楽しい例です。

通常のステータス行:

ここに画像の説明を入力してください

"statusline
hi green term=bold cterm=bold ctermfg=107
hi red term=bold cterm=bold ctermfg=167
hi gray term=bold cterm=bold ctermfg=0
hi lblue term=bold cterm=bold ctermfg=12

function! Palpatine()
    let str='At last, the Jedi are no more' 
    return str
endfunction

function! Force()
    let str=',~`,~`,~`,~`,~`,~`,~`,~'
    return str
endfunction

function! DefaultStatus()
    let statusStr='%#red#Palpatine: %#gray#%{Palpatine()} %#lblue#%{Force()} %=%#green#Yoda'
    return statusStr
endfunction

set laststatus=2
set statusline=%!DefaultStatus()

関数呼び出しのステータス変更:

ここに画像の説明を入力してください

function! Yoda()
    let str='Not if anything to say about it, I have'
    return str
endfunction

function! MyStatus()
    let statusStr='%#red#Palpatine %=%#lblue#%{Force()} %#gray#%{Yoda()} %#green#:Yoda'
    return statusStr
endfunction

function! MyFunc()
    set statusline=%!MyStatus()
endfunction

noremap <C-m> :call MyFunc()<CR>

上記の定義では、を押すたびにCtrlmステータスラインが上記に変わります。

これで、自動コマンドを設定することで、挿入モードに入るたびにデフォルトに戻すことができます。

autocmd InsertEnter * set statusline=%!DefaultStatus()

挿入に戻る:

ここに画像の説明を入力してください

于 2011-06-02T19:37:20.227 に答える