GNU/Linux >> Linux の 問題 >  >> Linux

挿入モードマップ「」が予期せずに自分自身を挿入したり、意図したキーストロークを実行したりするのはなぜですか?

Vim 7.3.1-762、mintty 1.1.2(xterm)、cygwin、Windows XPでは、挿入モードマップ<F4> 目的のキーストロークを一度に実行しますが、別のときに自分自身を挿入します。この不確定な動作は、<F4>を保持している場合に特に発生します キーが押されました。

複数のVim、ターミナル、およびオペレーティングシステムのバージョン間で動作を予測可能にするにはどうすればよいですか?

これは、~/.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> など。私は上記の行動を経験していません。また、timeoutを無効にした場合 set notimeoutのオプション うまくいくようです。

承認された回答:

<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の予測できない動作を説明していません。 挿入モードマップ。


Linux
  1. SSHキーを設定する方法

  2. sudoがエイリアスを無視するのはなぜですか?

  3. Korn Shellの「set-f」は何をしますか?

  1. Ascファイルを提供することで、意図したソースコードをダウンロードしていることをどのように確認できますか?

  2. Linux –Setuidが機能しないのはなぜですか??

  3. Ssh -tオプションがリダイレクト出力にCrとLfを追加するのはなぜですか?

  1. Unix時間が1970-01-01から始まるのはなぜですか?

  2. set -x は何をしますか?

  3. LANG=C は多くの /etc/init.d/* スクリプトにあります。 LANG=C の機能と、LANG=C を設定する必要がある理由。