Почему карта вставки «<F4>» непредсказуемо вставляет себя или выполняет намеченные штрихи?

В Vim 7.3.1-762 mintty 1.1.2 (xterm), cygwin, Windows XP, карта вставки в режиме <F4> выполняет намеченные штрихи в одно время, но вставляет себя в другое время. Это неопределенное поведение особенно возникает, если я удерживаю нажатой клавишу <F4> .

Как сделать поведение предсказуемым при использовании нескольких версий Vim, терминалов и операционной системы?

Это код, который я определил в файле ~/.vimrc , который мне кажется уместным:

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

Если я присваиваю сопоставление функциональной клавише выше <F4> , например <F5> , <S-F7> и т. Д. Я не испытываю описанного выше поведения. Также, если я set notimeout параметр timeout с помощью set notimeout он, похоже, делает трюк.

2 Solutions collect form web for “Почему карта вставки «<F4>» непредсказуемо вставляет себя или выполняет намеченные штрихи?”

Я сделал ключ <F4> очевидно, работающим во всех режимах, используя map <expr> выражения map <expr> следующим образом:

 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 

Но все же мой ответ не объясняет непредсказуемое поведение карты вставки imap .

Этот комментарий

 especially occurs if I hold the <F4> key depressed. 

что проблема связана с повторением ключа (увеличение скорости повторения при удерживании клавиши вниз), мешающее таймауту, используемому для определения того, является ли escape-символ началом функциональной клавиши или функциональным символом vi. Когда vi (или vim) слишком быстро набирает слишком много символов, он видит начало функционального ключа в качестве escape-кода и (например) прерывает текущую вставку.

Некоторые программы (например, xterm) отправят vt100-стиль PF1-PF4 для F1- F4 . В результате escape O S является командой vi, которая помещает вас в режим insert, позволяя ему вставлять части управляющих последовательностей, которые он читает.

Дальнейшее чтение:

  • Функциональные клавиши VT220-Style (последовательности управления XTerm)
  • цвета xterm слишком яркие
  • Binding Shift-Enter для вставки новой строки без оценки текущего выражения
  • Как прокручивать нижнюю часть или в начало сеанса терминала в xterm?
  • Xterm не загружает цветовые схемы
  • Цвета Vim, конфликтующие с терминальными
  • В xterm, что такое «Имя знака»?
  • Как исправить акценты в верхнем баре xterm?
  • Уменьшить задержку управления c в xterm и tmux
  • LinuxMint - `who`,` w` и `last` не сообщают о терминальных эмуляторах anylonger
  • Содержимое буфера Vi остается на экране после использования экранных команд
  • Как скрипт bash обнаруживает поддержку escape-символов титрования окна?
  • Interesting Posts

    Как расшифровать имена хостов зашифрованных .ssh / known_hosts со списком имен хостов?

    Как установить Thunderbird 31.4 на centos7

    Как создать ярлыки файлов в файловом менеджере?

    Как я могу использовать два загрузочных дистрибутива Linux, сохраняя один в качестве основного и постоянно меняя второй?

    Невозможно плитку плавающих окон в xmonad

    Bash: путь или ссылка на строку в файле?

    Отключить автоматическое отслеживание последовательного порта в Linux (Fedora)

    Как добавить группу "sudo"

    Почему я не могу удалить эти элементы массива в jq?

    Создание пустого файла с именем переменной в скрипте

    TCSH Prompt отображает синтаксическую ошибку в отношении отсутствующего кронштейна

    где поставить двоичные файлы, чтобы они всегда находились на пути и их можно было легко найти

    В Debian 7, какой пользователь использует bind9 для запуска демона?

    Проблема с рекурсивной загрузкой с помощью wget

    source my ~ / .bash_aliases из скрипта не в ~ /

    Linux и Unix - лучшая ОС в мире.