Как исправить странное поведение backspace с помощью urxvt + zsh?


15

Я использую urxvt в сочетании с Zsh. Однако с момента моей новой установки Ubuntu 10.04 у меня возникла следующая проблема. Если я набираю клавишу Backspace, курсор перемещается вправо (вместо удаления символов слева).

Предположим, я набрал n символов, а затем, нажимая клавишу «Backspace», n-раз перемещает курсор на n позиций влево, если я набираю «backspace», то еще на один курсор больше не двигается.

Если я печатаю стрелку влево, ничего не происходит, если я набираю стрелку вправо, после чего появляется какой-то символ.

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

не помогло

urxvt + bash отлично работает, как и xterm + zsh.

zsh-версия: 4.3.11-4ubuntu2.is.3ubuntu1 rxvt-unicode версия: 9.09-3

Есть идеи, как это исправить?

Ответы:


19

Попробуйте добавить следующее в ваш .zshrc:

TERM=xterm

Это исправило это для меня FWIW.
Seth

5
Лучше использовать TERM=xterm-256colorдля поддержки 256 цветов.
xuhdev

1
Разве вы не избежали проблемы, используя xterm вместо urxvt?
villasv

1
Да, это сработало и для меня. Я использую подсистему Windows для Linux (WSL) с Ubuntu и ZSH, и это раздражало меня так долго. Спасибо тебе за это.
Дейв Рейд

7

На зш что bindkey | grep deleteговорит? Вот строки, которые я получаю:

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

Вы должны иметь «^?» поскольку это представляет собой забой. Если нет ... вы можете позвонить bindkey "^?" backward-delete-charв приглашении zsh, чтобы вставить его.

Это решает проблему?


1
Bindkey | grep delete "^ D" delete-char-or-list "^?" backward-delete-char
студентка

1

Вы также можете обойти проблему, установив

stty erase '^?'

Вот некоторые подробности о девиантном поведении некоторых эмуляторов терминала (кстати, именно поэтому некоторые эмуляторы имеют эту проблему): Linux Backspace / Delete mini-HOWTO .


1

Это старая ветка, и, возможно, никто не увидит этого, но проблема для меня была в .Xresourcesфайле. Я неверно истолковал URxvt*termNameпараметр как строку, которая станет urxvtзаголовком окна. Это фактически то, что становится $TERMпеременной окружения, если оболочка не переопределяет это ( bashделает).

Моим решением было добавить URxvt*termName: xterm-256colorв ~/.Xresourcesфайл. Как и при любых изменениях в этом файле, вам нужно будет запустить xrdb -merge ~/.Xresourcesи полностью перезапустить urxvt(включая urxvtdпроцессы демона), чтобы отобразились изменения.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.