In Vim 7.3.1-762, mintty 1.1.2 (xterm), cygwin, Windows XP, die Einfügemodus-Zuordnung <F4>
führt die beabsichtigten Tastenanschläge zu einem Zeitpunkt aus, fügt sich jedoch zu einem anderen Zeitpunkt selbst ein. Dieses undeterministische Verhalten tritt besonders auf, wenn ich <F4>
gedrückt halte Taste gedrückt.
Wie mache ich das Verhalten über mehrere Vim-, Terminal- und Betriebssystemversionen hinweg vorhersagbar?
Dies ist der Code, den ich in meinem ~/.vimrc
definiert habe Datei, die mir relevant erscheint:
set compatible
set timeout
set ttimeout
set timeoutlen=1000
set ttimeoutlen=100
imap <F4> <C-><C-O>:set relativenumber! relativenumber?<CR>
Wenn ich das Mapping einer Funktionstaste über <F4>
zuweise , z.B. <F5>
, <S-F7>
usw. Ich erlebe das oben genannte Verhalten nicht. Auch wenn ich das timeout
deaktiviere Option mit set notimeout
es scheint zu funktionieren.
Akzeptierte Antwort:
Ich habe den <F4>
erstellt Schlüssel funktionieren anscheinend in allen Modi, indem map <expr>
verwendet wird Ausdruckszuordnungen wie folgt:
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
Aber meine Antwort erklärt immer noch nicht das unvorhersehbare Verhalten von imap
Karte im Einfügemodus.