Когда я открываю документ с помощью 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 нет возможности произвольного назначения клавиш (думаю, это было в списке пожеланий). Так что...
Настройте Putty для эмуляции известного и хорошо определенного типа терминала. К сожалению, таких нет, поэтому придется использовать что-то вроде xterm.
Убедитесь, что Putty сообщает Linux-боксу, какой тип терминала он эмулирует. Частично это достигается путем настройки параметров Putty, а частично — путем использования протокола, который передает TERM (например, поддержка ssh в Putty), а не того, который этого не делает (поддержка telnet в Putty).
Убедитесь, что TERM действительно установлен в том значении, в котором он должен быть (
echo $TERM
).Убедитесь, что запись terminfo для этого значения TERM определяет нужные вам ключи (см. выше).
Убедитесь, что клавиша PgUp отправляет то, что должна. В Vim войдите в режим вставки и нажмите Ctrl+ V, затемPgUp
решение2
export TERM=xterm должен решить вашу проблему