GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum fügt sich die Einfügemodus-Karte „“ unvorhersehbar ein oder führt beabsichtigte Tastenanschläge aus?

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.


Linux
  1. So richten Sie SSH-Schlüssel ein

  2. Warum stimmt [a-z] mit Kleinbuchstaben in Bash überein?

  3. Warum ignoriert Sudo Aliasse?

  4. Warum druckt Man um 00:30 Uhr „Gimme Gimme Gimme“?

  5. Linux – Warum funktioniert Setuid nicht?

So richten Sie eine passwortlose SSH-Anmeldung ein

So richten Sie SSH-Schlüssel unter Ubuntu 18.04 ein

So richten Sie WireGuard VPN unter Linux ein

Was macht "set -x"?

LANG=C ist in einer Reihe von /etc/init.d/*-Skripten enthalten. Was macht LANG=C und warum müssen Sie LANG=C setzen.

Warum gibt das Hinzufügen einer lokalen IP und eines Benutzernamens in scp einen Public-Key-Fehler zurück?