Vim отображается в статусной строке после задержки

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

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

1 ответ

Решение

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

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

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

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

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

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

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

Другие вопросы по тегам