Jak naprawić dziwne zachowanie backspace za pomocą urxvt + zsh?

15

Używam urxvt w połączeniu z zsh. Jednak od czasu mojej nowej instalacji systemu Ubuntu 10.04 mam następujący problem. Po wpisaniu backspace kursor przesuwa się w prawo (zamiast usuwać znaki po lewej).

Załóżmy, że wpisałem n znaków, a następnie naciśnięcie backspace n-razy przesuwa kursor n- pozycje w lewo, jeśli wpisuję backspace, to jeszcze jeden, kursor już się nie porusza.

Jeśli piszę lewą strzałkę, nic się nie dzieje, jeśli później piszę prawą strzałkę, pojawia się jakaś postać.

mv .zshrc .zshrc.bak
mv .Xdefaults .Xdefaults.bak

nie pomogło

Urxvt + bash działa dobrze, podobnie jak xterm + zsh.

wersja zsh: 4.3.11-4ubuntu2.is.3ubuntu1 rxvt-wersja Unicode: 9.09-3

Jakiś pomysł jak to naprawić?

student
źródło

Odpowiedzi:

19

Spróbuj dodać następujące elementy do pliku .zshrc:

TERM=xterm
ycallaf
źródło
To naprawiło dla mnie FWIW.
seth
5
Lepsze użycie TERM=xterm-256colordo obsługi 256 kolorów.
xuhdev 17.04.16
1
Czy nie unikasz problemu, używając xterm zamiast urxvt?
villasv
1
Tak, to zadziałało również dla mnie. Korzystam z Windows Subsystem for Linux (WSL) z Ubuntu i ZSH i to mnie denerwuje od tak dawna. Dziękuję Ci za to.
Dave Reid,
7

Co mówi bindkey | grep deleteZsh? Oto linie, które otrzymuję:

"^D" delete-char-or-list
"^H" backward-delete-char
"^[3;5~" delete-char
"^[[3~" delete-char
"^?" backward-delete-char

Powinieneś mieć „^?” ponieważ reprezentuje to backspace. Jeśli nie ... możesz zadzwonić bindkey "^?" backward-delete-charw wierszu polecenia zsh, aby go wprowadzić.

Czy to rozwiązuje problem?

Ehtesh Choudhury
źródło
1
bindkey | grep usuń „^ D” delete-char-or-list „^?” backward-delete-char
student
1

Możesz także obejść ten problem, ustawiając

stty erase '^?'

Oto kilka szczegółów dotyczących dewiacyjnego zachowania niektórych emulatorów terminali (przez co niektóre emulatory mają ten problem): Linux Backspace / Delete mini-HOWTO .

rotiyan
źródło
1

To stary wątek i być może nikt tego nie zobaczy, ale problem był dla mnie w .Xresourcespliku. Źle zinterpretowałem URxvt*termNameparametr jako ciąg znaków, który stałby się urxvttytułem okna. W rzeczywistości staje się $TERMzmienną środowiskową, chyba że powłoka ją nadpisuje ( bashrobi).

Moim rozwiązaniem było dodanie URxvt*termName: xterm-256colordo ~/.Xresourcespliku. Podobnie jak w przypadku każdej zmiany tego pliku, konieczne będzie uruchomienie xrdb -merge ~/.Xresourcesi całkowite ponowne uruchomienie urxvt(w tym urxvtdprocesów demona), aby zmiany zostały wyświetlone.

Blieque
źródło