0

Vim には、タイムアウトのない組み込みの複合コマンドがあります。たとえばg、次のキーストロークを永久に待ちます。そのように動作するカスタム複合バインディングを作成したいと思います。しかし、できれば、他のバインディングが影響を受けないようにする必要があります (ここで設定を使用する可能性を示唆してset notimeoutいます)。特定のバインディングでそれを達成できない場合は、設定に戻る必要があると思いset notimeoutます。何か提案はありますか?

4

2 に答える 2

4

showcmd次の文字を保留している間、動作せず、カーソルが右下隅に配置されていても問題ない場合は、次を使用しgetchar()ます。

nnoremap <Plug>PluginAction-a do-something-here-for-key-a
function s:Getchar()
    let char=getchar()
    if type(char)==type(0)
        return nr2char(char)
    endif
    return char
endfunction
nmap <expr> \g "<Plug>PluginAction-".<SID>Getchar()

.

于 2012-11-25T13:06:54.873 に答える
2

組み込みコマンドとの重複がない限り、複合マッピングの最初のキーのみへのマッピングを作成し、getchar()(キーを無期限に待機する) 経由で複合マッピングの後続のすべてのキーを消費してから、にディスパッチすることができます。入力されたキーの完全なシーケンスに基づく対応するハンドラー。

これは確かに直接マッピングほど快適ではありませんが、うまくいくはずです。'timeoutlen'の良い値がまだあなたの問題を解決していないかどうか、私は本当に一生懸命考えます。少なくとも私はこれを問題として認識したことはありません。

于 2012-11-25T13:11:19.593 に答える