작업자 보류 모드에서 커서 모양 변경


9

Gvim에서 내 커서 :

Gvim의 내 커서

를 누른 후 Gvim에 내 커서 d:

<code> d </ code>를 누른 후 Gvim에서 내 커서

운영자 보류 모드에있을 때 터미널 Vim에서 커서를 변경할 수있는 방법이 있습니까? 스크린 샷과 똑같이 보일 필요는 없습니다.

이것은에 의해 수행 o:hor50-CursorguicursorGVIM합니다. Vim에서 볼 수있는 유일한 옵션은 다음과 같습니다.

t_SI    start insert mode (bar cursor shape)        *t_SI* *'t_SI'*
t_SR    start replace mode (underline cursor shape) *t_SR* *'t_SR'*
t_EI    end insert or replace mode (block cursor shape) *t_EI* *'t_EI'*
    |termcap-cursor-shape|

그러나 운영자 보류 모드에 대해서는 아무것도 없습니다 ...


2
가능하지 않다고 생각합니다 (소스 코드 패치를 사용할 수 있습니다 ..). 내가하는 일은 Vim 창의 오른쪽 하단을보고 부분적으로 소개 된 명령 문자를 확인하는 것입니다 ( showcmd설정되어 있음). 또한 모든 시간 초과 및 esckeys옵션을 비활성화합니다 (Vim을 유지하지만 op-pending 모드에서 수행하려는 작업을 생각할 수 있습니다).
VanLaser

1
@ VanLaser 그래,하지만 난 커서가 좋아 ;-)
Martin Tournoij

Hehe, 나는 이해할 수있다 :)
VanLaser

나는 C / C ++를 알고 $ 현상금을 제공하고 가능하다면 Vim 소스 코드로 구현하려고 시도 할 수있다. :
VanLaser

vi.stackexchange.com/a/11437/10337 을 사용 하여 운영자 보류 모드를 감지하고 ansi escape를 에코하여 커서를 변경할 수 있습니다.
laktak

답변:


3

오퍼레이터 보류 모드로 들어가거나 나갈 때 커서를 업데이트합니다.

약간 해키 솔루션이지만 성능 문제가 있다고 생각하지 않습니다.

" This is esentially:
"   exec 'silent !printf "\e[" . a:t . ' q'
"   redraw!
" but without the screen flash
function! s:setCursor(t)
    " Save existing values.
    let [l:title, l:t_ts, l:t_fs, l:titlestring] = [&title, &t_ts, &t_fs, &titlestring]

    try
        let &titleold = ''
        let &t_ts = "\e[0;0"
        let &t_fs = "\e[" . a:t . ' q'
        set title
        set titlestring=H
        redraw!
    finally
        let [&title, &t_ts, &t_fs, &titlestring] = [l:title, l:t_ts, l:t_fs, l:titlestring]
    endtry
endfunction

let s:prevmode = ''
function! DetectPendingMode(timer)
    let l:mode = mode(1)
    if l:mode is# s:prevmode
        return
    endif

    if l:mode is# 'no'
        call <SID>setCursor(4)
    elseif s:prevmode is# 'no'
        call <SID>setCursor(2)
    endif
    let s:prevmode = l:mode
endfunction

call timer_start(250, 'DetectPendingMode', {'repeat': -1})

커서 스타일을 원하는 스타일로 변경해야 할 수도 있습니다 SetCursor().

0: blinking block.
1: blinking block.
2: steady block.
3: blinking underline.
4: steady underline.
5: blinking bar (xterm).
6: steady bar (xterm).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.