モードマップを挿入する理由」「予期せず自動的に挿入または予想されるキーストロークを実行しますか?

モードマップを挿入する理由」「予期せず自動的に挿入または予想されるキーストロークを実行しますか?

Vim 7.3.1-762、mintty 1.1.2(xterm)、cygwin、およびWindows XPでは、挿入モードマッピングは<F4>予想されるキーストロークを一度実行しますが、別の時間に自分自身を挿入します。この不確実な動作は、特にキーを押しているときに発生します<F4>

複数のVim、ターミナル、およびOSバージョンで動作を予測可能にする方法は?

~/.vimrcこれは私に関連しているように見えるファイルで定義したコードです。

set compatible
set timeout
set ttimeout
set timeoutlen=1000
set ttimeoutlen=100
imap <F4> <C-\><C-O>:set relativenumber! relativenumber?<CR>

たとえば、<F4>上記のファンクションキーにマッピングを割り当てると、上記の動作は発生しません。また、そのオプションを無効にすると問題が解決するようです。<F5><S-F7>timeoutset notimeout

ベストアンサー1

<F4>次の式グラフを使用して、map <expr>すべてのモードでキーを有効にしました。

MapOptToggle <F4> relativenumber
MapOptToggle! <S-F4> number

command! -bang -nargs=+ MapOptToggle call <SID>MapOptToggle(<bang>0, <f-args>)
function! s:MapOptToggle(bang, key, opt)
  function! s:ToggleOpt(opt)
    if mode() =~# '\vno?' || !&showmode
      exec 'set ' . a:opt . '! ' . a:opt . '?'
    else
      exec 'set ' . a:opt . '!'
    endif
    redraw
    return ''
  endfunction
  let a='noremap'
  let b='<unique> <silent> <expr> ' . a:key . ' <SID>ToggleOpt(' . string(a:opt) . ')'
  exec a . ' ' . b
  exec a . '! ' .  b
  exec 'set ' . (a:bang ? 'no' : '') . a:opt
endfunction

imapしかし、私の答えはまだ挿入モードマッピングの予測不可能な動作を説明していません。

おすすめ記事