1

проблема

Когда я использую bash в tmux, я не могу использовать клавишу со стрелкой влево (на моей клавиатуре), чтобы переместить курсор влево на набранный текст. Другие символы не отображаются, курсор не двигается, ничего не происходит.

подробности

Если я ввожу vim, стрелка влево работает для навигации. Таким образом, это не является общей проблемой в tmux, а только тем, что отображается в командной строке bash. Стрелки вверх и вниз работают в bash в tmux. Стрелка влево также нормально работает в bash за пределами tmux. Когда я в bash в tmux, нажатие Shift Left перемещает курсор влево.

Базовая настройка

Из PuTTY в Windows я ssh'ing к коробке Fedora 24. Затем я запускаю tmux.


Среда

Конфигурация замазки

Terminal -> Keyboard -> keypad: ESC[n~
Terminal -> Features -> nothing checked
Connection -> Data -> term type string: putty-256color

Ракушка

Вне tmux:

$ echo $0
-bash
$ help
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)

Внутри Tmux:

$ echo $0
-bash
$ help
GNU bash, version 4.3.42(1)-release (x86_64-redhat-linux-gnu)

Переменные Bash

Вне tmux:

$ echo $TERM
putty-256color

Внутри Tmux:

$ echo $TERM
screen-256color

Я также пытался установить другие значения для $TERM внутри tmux, такие как screen.putty-256color который я нашел с помощью ls -1 /usr/share/terminfo/s/screen* - похоже, ничего не изменилось .

Дамп настроек bash, одинаковых внутри или снаружи tmux:

$ shopt -o
allexport       off
braceexpand     on
emacs           on
errexit         off
errtrace        off
functrace       off
hashall         on
histexpand      on
history         on
ignoreeof       on
interactive-comments    on
keyword         off
monitor         on
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         off
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          off

У меня нет личного .inputrc, но я вижу, что emacs включен, и /etc /inputrc имеет этот раздел:

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# commented out keymappings for pgup/pgdown to reach begin/end of history
#"\e[5~": beginning-of-history
#"\e[6~": end-of-history
"\e[5~": history-search-backward
"\e[6~": history-search-forward
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line
"\eOc": forward-word
"\eOd": backward-word

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

Заметки

Я думаю, что это работало неделю назад. Различия с тех пор я думал о:

  • У меня был другой конфиг PuTTY (я могу попытаться восстановить его, сейчас он недоступен)
  • Я установил соляризованные цвета для vim и попробовал их цвета PuTTY. Когда я это сделал, я еще раз взглянул на выбор $ TERM, но не думаю, что внес какие-либо существенные изменения, которые я еще не отменил.
  • Обновлены заголовки ядра, обновлен glibc.

Поиск проблемы

Установка zsh и установка set-option -g default-shell /bin/zsh в ~/.tmux.conf не решили проблему.

su «ИНГ корень и начало tmux от корня не удалось решить эту проблему.

1 ответ1

3

Я решил проблему сегодня утром, поэтому выкладываю ответ со своим исправлением:

исправлять

Измените конфигурацию PuTTY Connection -> Data -> Terminal-type string на xterm-256color .


объяснение

Ну, вот разница между значениями terminfo для kLFT, которые, по словам man terminfo представляют собой сдвинутую клавишу со стрелкой влево:

$ infocmp xterm-256color putty-256color | grep '\\E\[D'
kLFT: '\E[1;2D', '\E[D'

Я думаю, что Bash понимает \E[D как команду для перемещения курсора влево, поэтому имеет смысл, что shift-left-arrow сработала для перемещения курсора влево. Но нет другой записи для \E[D , и

$ infocmp xterm-256color | grep '\\E\[D'

ничего не находит, поэтому не похоже, что xterm-256color связал с этим что-то еще, и kLFT - единственное совпадение в putty-256color. man terminfo говорит

Коды, отправляемые клавишами со стрелками влево, вправо, стрелкой вверх, стрелкой вниз и home, могут быть заданы как kcub1, kcuf1, kcuu1, kcud1 и khome соответственно.

А в другом месте перечисляет kcub1 как клавишу со стрелкой влево, поэтому я должен искать kcub1:

$ infocmp xterm-256color | grep kcub1
kbs=\177, kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,

$ infocmp putty-256color | grep kcub1
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,

Но для него установлено одинаковое значение \EOD .

В screen-256color значение для kcub1 такое же, и kLFT не устанавливается.

Кроме того, у меня нет много объяснений - если это все складывается и имеет смысл для вас, пожалуйста, напишите ответ.

Примечание: я думал, что это работало неделю назад с putty-256color, но я вспоминаю об изменении некоторых вариантов $ TERM, когда я установил Solarized, поэтому я предполагаю, что я изменил его на putty-256color в то время и забыл об этом.

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