Как сопоставить клавиши PageDown и PageUp для их нормальной работы

Как сопоставить клавиши PageDown и PageUp для их нормальной работы

Когда я открываю документ с помощью viили vim, я не могу перемещаться по странице с помощью клавиш Page Upи Page Down. При нажатии этих клавиш vim, похоже, ведет себя ненормально и меняет регистр символов под курсором. Затем требуется несколько секунд, чтобы снова вернуться в insertрежим.

Пожалуйста, дайте мне знать, как назначить эти клавиши, чтобы при их нажатии я мог плавно прокручивать страницы, как Ctrl+ ( f/ b/ u/ d ).

Обновлять

Информация о машине и Vim

$ cat /etc/*-release  
Red Hat Enterprise Linux Server release 5.5 (Tikanga)


$ vim --version
VIM - Vi IMproved 7.0 (2006 May 7, compiled Jun 12 2009 07:08:36)

Примечание

Я использую Putty для подключения к этой машине.

решение1

Обновлять:

Я использую Putty для подключения к этой машине.

Тогда я угадал правильно, и мой ответ ниже, вероятно, применим.


Оригинальный ответ:

В вашем вопросе недостаточно информации, чтобы точно определить проблему. Пока мы ждем, позвольте мне рассказать аудитории небольшую историю:

Эмулятор терминала и редактор

Если вы получаете доступ к компьютеру Linux с помощью эмулятора xterm, например Putty, ваша клавиша PgUp отправляет четыре символа Escape [ 5 ~в систему Linux.

Система Linux обрабатывает это, а затем передает все неактивные нажатия клавиш приложению.

Приложение vim использует системную библиотеку (я полагаю) для преобразования последовательностей символов обратно в «ключи» на основе значения переменной окружения TERM и соответствующей записи вterminfo

Если terminfo не определяет PgUp (или любую другую клавишу) как Escape [ 5 ~, Vim (вероятно) обработает четыре символа по отдельности.

«Многие коды клавиш курсора начинаются с Esc. Vim должен выяснить, является ли это одиночным нажатием клавиши Esc или началом последовательности клавиш курсора. Он ждет поступления следующего символа. Если он не поступает в течение одной секунды, предполагается одно нажатие Esc».Поэтому vim немного подождет, чтобы понять, хотите ли вы нажать Esc, чтобы выйти из режима вставки.

[и 5являются допустимыми командами Vim. Но, возможно, Vim воспринимает Esc как сигнал начала escape-последовательности, которую он не распознает, — ему приходится угадывать, где заканчивается эта последовательность, и начинать интерпретировать символы как команды или данные с этой точки.

~— это команда vim для переключения регистра символа под курсором.

Счастливый конец

Правильно установите TERM (в соответствии с настройками Putty/эмулятора) и убедитесь, что в 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 нет возможности произвольного назначения клавиш (думаю, это было в списке пожеланий). Так что...

  1. Настройте Putty для эмуляции известного и хорошо определенного типа терминала. К сожалению, таких нет, поэтому придется использовать что-то вроде xterm.

  2. Убедитесь, что Putty сообщает Linux-боксу, какой тип терминала он эмулирует. Частично это достигается путем настройки параметров Putty, а частично — путем использования протокола, который передает TERM (например, поддержка ssh в Putty), а не того, который этого не делает (поддержка telnet в Putty).

  3. Убедитесь, что TERM действительно установлен в том значении, в котором он должен быть ( echo $TERM).

  4. Убедитесь, что запись terminfo для этого значения TERM определяет нужные вам ключи (см. выше).

  5. Убедитесь, что клавиша PgUp отправляет то, что должна. В Vim войдите в режим вставки и нажмите Ctrl+ V, затемPgUp

решение2

export TERM=xterm должен решить вашу проблему

Связанный контент