GNU/Linux >> Znalost Linux >  >> Linux

Proč se mapa v režimu vkládání „“ nepředvídatelně vkládá nebo provádí zamýšlené úhozy?

Ve Vimu 7.3.1-762, mintty 1.1.2 (xterm), cygwin, Windows XP, mapa režimu vkládání <F4> provede zamýšlené úhozy v jednom okamžiku, ale vloží se v jiném okamžiku. K tomuto nedeterministickému chování dochází zejména v případě, že držím <F4> klávesa stisknutá.

Jak zajistím, aby bylo chování předvídatelné ve více verzích Vim, terminálu a operačního systému?

Toto je kód, který jsem definoval ve svém ~/.vimrc soubor, který se mi zdá relevantní:

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

Pokud přiřadím mapování k funkční klávese výše <F4> , např. <F5> , <S-F7> atd. Výše ​​uvedené chování nezažívám. Také pokud deaktivuji timeout možnost s set notimeout zdá se, že to funguje.

Přijatá odpověď:

Vytvořil jsem <F4> klíč zřejmě funguje ve všech režimech pomocí map <expr> výraz mapuje následovně:

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

Moje odpověď však stále nevysvětluje nepředvídatelné chování imap mapa režimu vložení.


Linux
  1. Proč se [a-z] shoduje s malými písmeny v bash?

  2. Jak funguje vidlicová bomba?

  3. Proč Sudo ignoruje aliasy?

  1. Proč muž v 00:30 tiskne „gimme Gimme Gimme“?

  2. Co dělá „set -f“ v Korn Shell?

  3. Jak poskytnutí souboru ASC zajistí, že stahuji zamýšlený zdrojový kód?

  1. Proč možnost Ssh -t přidává Cr &Lf do přesměrovaného výstupu?

  2. LANG=C je v řadě skriptů /etc/init.d/*. Co dělá LANG=C a proč je potřeba nastavit LANG=C.

  3. Proč přidání místní IP a uživatelského jména do scp vrátí chybu veřejného klíče?