Vim дисплей в статусной строке после задержки - PullRequest
8 голосов
/ 02 июня 2011

Возможно ли, чтобы строка состояния в Vim обновлялась так и так долго после данного события?

И если да, то как это сделать?

1 Ответ

32 голосов
/ 02 июня 2011

Как уже отмечали другие, использование временных изменений в статусной строке в настоящее время невозможно. Однако, если вы можете выбрать подходящее событие, при котором статус возвращается к значению по умолчанию, тогда вам может повезти. Например, если ваш рабочий процесс:

  1. Esc, чтобы перейти в обычный режим и вызвать ваш ярлык
  2. Посмотрите результат в строке состояния и вернитесь в режим вставки, чтобы продолжить работу

тогда вы можете использовать событие InsertEnter в автокоманде, чтобы изменить статус на статус по умолчанию, когда вы нажмете i в обычном режиме.

Вот небольшой забавный пример, который вы, вероятно, можете изменить в соответствии со своими потребностями.

Нормальная строка состояния:

enter image description here

"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()

Изменение статуса при вызове функции:

enter image description here

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>

С приведенными выше определениями, каждый раз, когда я нажимаю Ctrl m , строка состояния меняется на приведенную выше.

Теперь, установив автокоманду, мы можем вернуть ее к значениям по умолчанию при каждом входе в режим вставки.

autocmd InsertEnter * set statusline=%!DefaultStatus()

Вернуться к вставке:

enter image description here

...