Виправити клавіші зі стрілками, що відображають A, B, C, D in vi (не in vim)


16

Я знаю, що в vim можу додати

set nocompatible

в .vimrcяких слід уникати , що клавіші зі стрілками відображення А, В, С, D в режимі вставки.

Але я використовую vi Версія 4.0 (крупка) 12/25/06 .

Як я можу отримати таку саму поведінку?

== EDIT == (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-tubesize-short-overflow.patch , navkeys.patch та зберегти-dir.patch .

== EDIT (2) ==

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

== EDIT (3) ==

У відповідності з Unix Specification Single ліва стрілка, стрілка вниз, стрілка вправо, стрілка вгору , відповідають відповідно до наступних capname: kcub1, kcud1, kcuf1і kcuu1. Порівняння записів terminfo з xtermта rxvt-unicode-256colorдля цих знаків дає:

$ 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, знайти ключові коди, випромінювані клавіатурою, і виправити відповідну базу даних відповідно. Скарги на sysadmin теж можуть спрацювати.
Сато Кацура

1
Я все це сказав? Іноді я дивуюсь :) (звичайно, все, що я знав, це пов'язане з терміналом).
VanLaser

1
Ця версія vi побудована з ncurses, вона повинна використовуватись terminfo.
Ортомала Локні

2
Ви бачили ці поради ? Можливо, щось із них може стати в нагоді.
Борис Серебров

Відповіді:


2

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

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

Додайте це до RC-файлу вашої оболонки, і його слід визначити для кожного запущеного терміналу.


У моїй системі це просто дозволить Vi залишити режим вставки (що, мабуть, краще, ніж друкувати сміття, але все ще не зовсім вирішує проблему).
Мартін Турноїй

1

Іноді така поведінка може бути результатом незвичного налаштування ключових .vimrcкарт у вашому - так, наприклад, якщо у вас є щось, що відображає два ESCнатискання клавіш:

nmap <Esc><Esc> some_command_sequence

Тоді це може призвести до несправності vim з клавішами зі стрілками.


Описана ОП конфігурація є досить специфічною, і вона відображає поведінку, не маючи такого відображення. (Я перевірив це.)
Багатий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.