GNU/Linux >> Belajar Linux >  >> Linux

Mengapa Mode Sisipkan Memetakan "" Secara Tak Terduga Menyisipkan Dirinya Sendiri Atau Mengeksekusi Stroke Kunci yang Dimaksudkan?

Di Vim 7.3.1-762, mintty 1.1.2 (xterm), cygwin, Windows XP, peta mode insert <F4> mengeksekusi penekanan tombol yang dimaksud pada satu waktu tetapi memasukkan dirinya sendiri pada waktu lain. Perilaku tidak pasti ini terutama terjadi jika saya memegang <F4> kunci tertekan.

Bagaimana cara membuat perilaku dapat diprediksi di beberapa versi Vim, terminal, dan sistem operasi?

Ini adalah kode yang saya definisikan di ~/.vimrc saya file, yang tampaknya relevan bagi saya:

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

Jika saya menetapkan pemetaan ke tombol fungsi di atas <F4> , misalnya <F5> , <S-F7> dll. Saya tidak mengalami perilaku yang disebutkan di atas. Juga jika saya menonaktifkan timeout opsi dengan set notimeout tampaknya berhasil.

Jawaban yang Diterima:

Saya membuat <F4> kunci tampaknya berfungsi di semua mode dengan menggunakan map <expr> peta ekspresi sebagai berikut:

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

Tapi tetap saja jawaban saya tidak menjelaskan perilaku tak terduga dari imap peta mode-sisip.


Linux
  1. Apa yang dilakukan `set -x`?

  2. LANG=C ada di sejumlah skrip /etc/init.d/*. Apa yang dilakukan LANG=C dan mengapa Anda perlu menyetel LANG=C.

  3. Mengapa menambahkan IP lokal dan nama pengguna di scp mengembalikan kesalahan kunci publik?

  1. Bagaimana Cara Kerja Bom Garpu?

  2. Mengapa Manusia Mencetak "gimme Gimme Gimme" Pada 00:30?

  3. Nonaktifkan Kunci PrntScr Sepenuhnya

  1. Apa yang Dilakukan "set -f" Di Korn Shell?

  2. Bagaimana Menyediakan File Asc Memastikan Saya Mengunduh Kode Sumber yang Dimaksud?

  3. Linux – Mengapa Setuid Tidak Bekerja??