Timing.
Если символы появляются за достаточно короткий промежуток времени, маловероятно, что они были напечатаны по отдельности.
В vim опции esckeys
, ttimeout
и ttimeoutlen
определяют, нужно ли и как долго ждать завершения escape-последовательности. Это не традиционные варианты vi; в традиционном vi побег - это просто побег, а клавиши со стрелками бесполезны.
Вы можете проверить это, набрав Esc O A или Esc [ A очень быстро в VIM. Если вы достаточно быстры, и настройки вашего терминала не слишком экзотичны, один из них будет действовать как клавиша со стрелкой вверх. Медленно набирайте одно и то же, и оно сделает что-то другое Выполните команду :set noesckeys
, и она никогда не будет действовать как клавиша со стрелкой (даже если вы действительно нажимаете клавишу со стрелкой) - это цена, которую вы должны заплатить, если хотите, чтобы ответ на клавишу выхода был мгновенным.
Эксперимент можно провести с другими последовательностями, такими как ^[[3~
, но 3-символьную легче набрать.
Библиотека curses также использует тайм-ауты при интерпретации ввода с терминала. Вот связанный вопрос об этом: Как я могу узнать, что пользователь нажал клавишу ESC в консоли с помощью ncurses (Linux)?