3

Я просто наткнулся на странную проблему. Когда я захожу по SSH на свой сервер (centos, zsh) и набираю кое-что и нажимаю клавишу Backspace, это выглядит как пробел, но внутренне это действительно удаляет символы.

ls -l a

Обратите внимание, что пробел между l и a на самом деле, когда я нажимаю клавишу Backspace. Когда я сейчас нажму, вернется ls -a . Это только в zsh, в bash работает нормально.

Надеюсь, у кого-нибудь есть идея, что это такое и как это исправить.

Обновление: происходит только при использовании tmux/screen

Я также не могу очистить экран:

helium:~% echo $TERM
screen-256color
helium:~% clear
'screen-256color': unknown terminal type.

1 ответ1

5

Это необычно Я бы начал с того, чтобы посмотреть, работает ли Ctrl-L (т. Е. Zsh знает ваш терминал и может ли выполнить очистку экрана), и запустить echo $TERM чтобы увидеть, какой тип терминала zsh получил из Terminal.app; У меня есть Terminal.app, отправляющий xterm-color и он кажется переносимым и принятым.

Еще одна вещь, которую нужно проверить, это то, что происходит, когда вы нажимаете Ctrl-H, но я думал, что все современные системы остановились на 0x7F для возврата.

[пост-обновление с информацией на экране:]

Bash имеет больше встроенных хаков для предположения, что отсутствующие типы терминалов являются ANSI-ишем, но ваша основная проблема в том, что $TERM не распознается. Это сломает большинство приложений, которые хотят выдавать управляющие директивы эмулятору терминала. Переопределите $TERM в вашем ~/.zprofile:

case ${TERM} in
  screen-256color) TERM=screen.xterm-xfree86
  ;;
esac

Это является частью проблемы termcap/terminfo - она основана на том, что все имеют одинаковые имена, все обновляются и т.д. Переговоры не ведутся.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .