GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la carte en mode Insertion "" s'insère-t-elle de manière imprévisible ou exécute-t-elle les frappes de touches prévues ?

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.


Linux
  1. Pourquoi [a-z] correspond-il aux lettres minuscules dans Bash ?

  2. Comment fonctionne une fourche bombe ?

  3. Pourquoi Sudo ignore-t-il les alias ?

  4. Que fait « set -f » dans Korn Shell ?

  5. Linux - Pourquoi Setuid ne fonctionne-t-il pas ??

Comment configurer une connexion SSH sans mot de passe

Pourquoi `exit &` ne fonctionne pas ?

Comment configurer des clés SSH sur Ubuntu 18.04

Comment configurer WireGuard VPN sur Linux

Pourquoi l'ajout d'une adresse IP locale et d'un nom d'utilisateur dans scp renvoie-t-il une erreur de clé publique ?

Que fait 'set -e', et pourquoi pourrait-il être considéré comme dangereux ?