オペレーター保留モードでカーソルの形状を変更する


9

Gvimでのカーソル:

Gvimのカーソル

を押した後のGvimのカーソルd

<code> d </ code>を押した後のGvimのカーソル

オペレーター保留モードのときにターミナルVimでカーソルを変更する方法はありますか?スクリーンショットのように見える必要はありません。

これはによって行われo:hor50-Cursorguicursorgvimをのために。Vimに表示されるオプションは3つだけです。

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のスナップは保持されますが、たとえば、保留中のモードで何をしたいかを考えることができます)。
VanLaser 2016年

1
@VanLaserええ、でもカーソルは好きです;-)
Martin Tournoij

へへ、私はそれを理解できます:)
VanLaser 2016年

私はC / C ++を知っており、$の賞金を提供します。可能であれば、それをVimソースコードに実装しようとするかもしれません:D
VanLaser

vi.stackexchange.com/a/11437/10337を使用して、オペレーターの保留モードを検出し、ANSIエスケープをエコーし​​てカーソルを変更できます。
laktak 2017

回答:


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.