Обновить:
Я использую Putty для подключения к этой машине
Тогда я угадал правильно, и мой ответ ниже, вероятно, применим.
Оригинальный ответ:
В вашем вопросе недостаточно информации, чтобы быть уверенным в вашей проблеме, пока мы ждем, позвольте мне рассказать аудитории:
Эмулятор терминала и редактор
Если вы получаете доступ к компьютеру Linux с помощью эмулятора xterm, такого как Putty, ваш ключ PgUp отправляет четыре символа Escape
[
5
~
в систему Linux.
Система Linux обрабатывает это и затем передает любые необработанные нажатия клавиш приложению.
Приложение vim использует системную библиотеку (я полагаю) для перевода последовательностей символов обратно в "ключи" на основе значения переменной окружения TERM и соответствующей записи в terminfo
Если terminfo не определяет PgUp (или любой другой ключ) как Escape
[
5
~
, Vim (вероятно) будет обрабатывать четыре символа по отдельности.
"Многие коды клавиш курсора начинаются с Esc. Vim должен выяснить, является ли это одним нажатием клавиши Esc или началом последовательности клавиш курсора. Он ждет прибытия следующего персонажа. Если он не приходит в течение одной секунды, предполагается один Esc. " Так что vim немного ждет, чтобы увидеть, хотите ли вы выйти из режима вставки.
[
и 5
являются действительными командами Vim. Но, возможно, Vim видит Esc как сигнал начала escape-последовательности, которую он не распознает - он должен угадать, где заканчивается эта последовательность, и возобновить интерпретацию символов как команд или данных с этой точки.
~
- команда vim для переключения регистра символа под курсором.
Счастливый конец
Правильно установите TERM (в соответствии с настройками Putty/emulator) и убедитесь, что terminfo имеет определение PgUp и т.д. В Unix-странах клавиатуры существовали до рождения IBM PC, у некоторых из них был ключ Previous Page, поэтому эта функция ключа называется kpp
,
$ infocmp xterm | grep kpp
knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, mc0=\E[i, mc4=\E[4i,
постскриптум
как сопоставить эти ключи
Насколько я знаю, у Putty нет возможности произвольного сопоставления клавиш (я думаю, что это было в списке пожеланий). Итак ...
Настройте Putty для эмуляции хорошо известного и определенного типа терминала. К сожалению, их нет, поэтому что-то вроде xterm придется делать.
Убедитесь, что Putty сообщает Linux-серверу, какой тип терминала он эмулирует. Частично это происходит путем настройки параметров Putty, а частично - с использованием протокола, который сообщает TERM (например, поддержка ssh в Putty), а не протокола, который этого не делает (поддержка telnet в Putty).
Убедитесь, что TERM действительно установлено на то, что должно быть (echo $TERM
).
Убедитесь, что запись terminfo для этих значений TERM определяет ключи, которые вы хотите (см. Выше).
Убедитесь, что ключ PgUp отправляет то, что он должен. В Vim войдите в режим вставки и нажмите Ctrl+V, затем PgUp