Исправьте отображение стрелок A, B, C, D в vi (не в vim)

16

Я знаю, что в VIM я могу добавить

set nocompatible

во .vimrcизбежание отображения клавиш со стрелками A, B, C, D в режиме вставки.

Но я использую vi Версия 4.0 (gritter) 25.12.06 .

Как я могу получить такое же поведение?

== РЕДАКТИРОВАТЬ == (1)

Я использую версию vi из Arch Linux, которая построена из этого хранилища CVS (последний коммит 24 февраля 2007 г.) с помощью следующей команды:

make PREFIX=/usr LIBEXECDIR=/usr/lib/ex PRESERVEDIR=/var/lib/ex \
TERMLIB=ncurses FEATURES="-DCHDIR -DFASTTAG -DUCVISUAL -DMB -DBIT8"

и с этими тремя патчами: fix-tubeize-short-overflow.patch , navkeys.patch и preserve-dir.patch .

== РЕДАКТИРОВАТЬ (2) ==

Проблемы возникают в LXTerminal 0.2.0 , Termite 10-1 , Tilda 1.2.4-1 , Terminator 0.98-1 и xterm 320-2, но не в urxvt v9.21 и не в виртуальных консолях Linux.

== РЕДАКТИРОВАТЬ (3) ==

В соответствии с Unix Specification Single левая стрелка, стрелка вниз, стрелка вправо, стрелка вверх , соответствуют соответственно следующим capname: kcub1, kcud1, kcuf1и kcuu1. Сравнение записей terminfo от xtermи rxvt-unicode-256colorдля этих capterms дает:

$ infocmp xterm rxvt-unicode-256color | grep -E 'kcuf1|kcub1|kcud1|kcuu1'

kcub1: '\EOD', '\E[D'.
kcud1: '\EOB', '\E[B'.
kcuf1: '\EOC', '\E[C'.
kcuu1: '\EOA', '\E[A'.

Изменение Xterm Terminfo записи по substituing '\EOD', '\EOB', '\EOC', '\EOA' на '\E[D', '\E[B', '\E[C', '\E[A'должны решить эту проблему , но это хорошая идея? Может быть, это сломает использование других программ стрелками?

Ортомала Локни
источник
2
Я думаю, что это вызвано взаимодействием терминала vi (m) <->, так что вы также можете попробовать некоторые обходные пути / конфигурацию терминала.
VanLaser
1
Перевод того, что @VanLaser сказал выше: ваша запись для текущей TERMв termcapили в terminfoбазах данных не синхронизирована с кодами, произведенными клавиатурой. Решение состоит не в том TERM, чтобы изменить , а в том , чтобы выяснить, viсвязано ли ваше с termcapили terminfo, найти коды клавиш, излучаемые клавиатурой, и соответствующим образом исправить соответствующую базу данных. Жалобы системному администратору тоже могут сработать.
Сато Кацура
1
Я сказал все это? Иногда я поражаюсь самому себе :) (конечно, все, что я знал, было то, что это связано с терминалом).
VanLaser
1
Эта версия vi собрана с помощью ncurses, и ее следует использовать terminfo.
Ортомала Локни
2
Вы видели эти советы ? Может быть, что-то из них может быть полезным.
Борис Серебров

Ответы:

2

Вы можете создать псевдоним, который устанавливает вашу $TERMпеременную

alias vi='TERM=rxvt-unicode-256color vi'

Добавьте это в rc-файл вашей оболочки, и он должен быть определен для каждого запускаемого вами терминала.

jecxjo
источник
В моей системе это просто заставит Vi выйти из режима вставки (что, вероятно, лучше, чем печать мусора, но все еще не решает проблему).
Мартин Турной
1

Иногда такое поведение может возникнуть в результате необычной настройки сопоставления клавиш в вашей системе .vimrc- например, если у вас есть что-то, что отображает два ESCнажатия клавиш:

nmap <Esc><Esc> some_command_sequence

Тогда это может привести к неисправности Vim с помощью клавиш со стрелками.

Пирз
источник
Конфигурация, описанная в OP, довольно специфична, и она отображает поведение без такого сопоставления. (Я проверял это.)
Рич