Napraw klawisze strzałek wyświetlające A, B, C, D w vi (nie w vimie)

16

Wiem, że w vimie mogę dodać

set nocompatible

w .vimrccelu uniknięcia sytuacji, w której klawisze strzałek wyświetlają A, B, C, D w trybie wstawiania.

Ale używam vi Wersja 4.0 (gritter) 12/25/06 .

Jak mogę uzyskać takie samo zachowanie?

== EDYCJA == (1)

Używam wersji vi z Arch Linux, która jest zbudowana z tego repozytorium CVS (ostatnie zatwierdzenie 24 lutego 2007) z następującą komendą:

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

oraz tezami trzy łatki: fix-tubeize-short-overflow.patch , navkeys.patch i preserve-dir.patch .

== EDYCJA (2) ==

Problemy występują w LXTerminal 0.2.0 , Termite 10-1 , Tilda 1.2.4-1 , Terminator 0.98-1 i xterm 320-2, ale nie w urxvt v9.21 ani w konsolach wirtualnych Linux.

== EDYCJA (3) ==

Według Single Unix Specyfikacja strzałka w lewo, strzałka w dół, strzałka w prawo, strzałka w górę odpowiednio odpowiadają następującym nazwawłaściwości: kcub1, kcud1, kcuf1i kcuu1. Porównywanie terminfo z wpisami xtermi rxvt-unicode-256colordla tych capterms daje:

$ 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'.

Modyfikowanie xterm terminfo wpisu przez substituing '\EOD', '\EOB', '\EOC', '\EOA' przez '\E[D', '\E[B', '\E[C', '\E[A'powinno rozwiązać problem, ale jest to dobry pomysł? Może to przerwie korzystanie z klawiszy strzałek w innych programach?

Ortomala Lokni
źródło
2
Myślę, że jest to spowodowane interakcją terminalu vi (m) <->, więc możesz także spróbować obejść / skonfigurować obejścia terminali.
VanLaser,
1
Tłumaczenie tego, co @VanLaser powiedział powyżej: Twój wpis dotyczący prądu TERMw bazach danych termcaplub terminfobazach danych nie jest zsynchronizowany z kodami generowanymi przez klawiaturę. Rozwiązaniem nie jest zmiana TERM, ale sprawdzenie, czy twój vilink jest połączony z, termcapalbo terminfoznalezienie kodów klawiszy emitowanych przez klawiaturę, i odpowiednio popraw odpowiednią bazę danych. Może również działać skarga do sysadmin.
Sato Katsura
1
Czy to wszystko powiedziałem? Czasami sam się dziwię :) (oczywiście wiedziałem tylko, że jest to związane z terminalem).
VanLaser,
1
Ta wersja vi jest zbudowana przy użyciu ncurses, więc należy jej użyć terminfo.
Ortomala Lokni
2
Widziałeś te wskazówki ? Może coś z nich może być przydatne.
Boris Serebrov

Odpowiedzi:

2

Możesz utworzyć alias, który ustawi twoją $TERMzmienną

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

Dodaj to do pliku rc powłoki i powinien być zdefiniowany dla każdego uruchamianego terminala.

jecxjo
źródło
W moim systemie spowoduje to, że Vi opuści tryb wstawiania (co jest prawdopodobnie lepsze niż drukowanie śmieci, ale nadal nie całkiem rozwiązuje problem).
Martin Tournoij,
1

Czasami takie zachowanie może wynikać z nietypowej konfiguracji mapowania klawiszy w twoim .vimrc- tak na przykład, jeśli masz coś, co mapuje dwa ESCnaciśnięcia klawiszy:

nmap <Esc><Esc> some_command_sequence

Może to doprowadzić do nieprawidłowego działania vima za pomocą klawiszy strzałek.

Pierz
źródło
Konfiguracja opisana przez OP jest dość specyficzna i wyświetla zachowanie bez takiego mapowania. (Przetestowałem to.)
Rich