2

Когда я открываю документ с помощью 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 ответ1

6

Обновить:

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

  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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .