Dans Vim 7.3.1-762, mintty 1.1.2 (xterm), cygwin, Windows XP, la carte en mode insertion <F4>
exécute les frappes de touches prévues à un moment mais s'insère à un autre moment. Ce comportement indéterministe se produit surtout si je tiens le <F4>
touche enfoncée.
Comment puis-je rendre le comportement prévisible sur plusieurs versions de Vim, de terminal et de système d'exploitation ?
C'est le code que j'ai défini dans mon ~/.vimrc
fichier, cela me semble pertinent :
set compatible
set timeout
set ttimeout
set timeoutlen=1000
set ttimeoutlen=100
imap <F4> <C-><C-O>:set relativenumber! relativenumber?<CR>
Si j'attribue le mappage à une touche de fonction au-dessus de <F4>
, par exemple. <F5>
, <S-F7>
etc. Je ne ressens pas le comportement mentionné ci-dessus. Aussi si je désactive le timeout
option avec set notimeout
ça a l'air de faire l'affaire.
Réponse acceptée :
J'ai fait le <F4>
la clé fonctionne apparemment dans tous les modes en utilisant map <expr>
cartes d'expression comme suit :
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
Mais ma réponse n'explique toujours pas le comportement imprévisible de l'imap
carte en mode insertion.