GNU/Linux >> Linux Esercitazione >  >> Linux

Perché la mappa in modalità di inserimento "" si inserisce in modo imprevedibile o esegue sequenze di tasti previste?

In Vim 7.3.1-762, mintty 1.1.2 (xterm), cygwin, Windows XP, la mappa della modalità di inserimento <F4> esegue i tasti premuti contemporaneamente ma si inserisce in un altro momento. Questo comportamento non deterministico si verifica soprattutto se tengo <F4> tasto premuto.

Come posso rendere prevedibile il comportamento su più versioni di Vim, terminale e sistema operativo?

Questo è il codice che ho definito nel mio ~/.vimrc file, che mi sembra rilevante:

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

Se assegno la mappatura a un tasto funzione sopra <F4> , per esempio. <F5> , <S-F7> ecc. Non sperimento il comportamento sopra menzionato. Anche se disabilito il timeout opzione con set notimeout sembra fare il trucco.

Risposta accettata:

Ho creato il <F4> chiave apparentemente funziona in tutte le modalità usando map <expr> mappe delle espressioni come segue:

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

Ma ancora la mia risposta non spiega il comportamento imprevedibile di imap mappa in modalità inserimento.


Linux
  1. Come impostare le chiavi SSH

  2. Come funziona una bomba a forcella?

  3. Perché l'uomo stampa "gimme Gimme Gimme" alle 00:30?

  4. Cosa fa "set -f" in Korn Shell?

  5. Perché l'opzione Ssh -t aggiunge Cr e Lf nell'output reindirizzato?

Come configurare l'accesso SSH senza password

Come configurare le chiavi SSH su Ubuntu 18.04

Come configurare WireGuard VPN su Linux

Cosa fa `set -x`?

Disattiva completamente la chiave PrntScr

Cosa fa 'set -e' e perché potrebbe essere considerato pericoloso?