问题

问题

问题

当我在 tmux 中使用 bash 时,我无法使用左箭头键(在键盘上)将光标移到我输入的文本的左侧。没有其他字符显示,光标不移动,什么都没有发生。

细节

如果我进入 vim,左箭头可用于导航。因此,这似乎不是 tmux 中的一般问题,而只是 bash 命令行中出现的问题。向上和向下箭头在 tmux 中的 bash 中有效。左箭头在 tmux 之外的 bash 中也正常工作。当我在 tmux 中的 bash 中时,按 Shift Left 会将光标向左移动。

基本设置

我从 Windows 中的 PuTTY ssh 连接到 Fedora 24 机器。然后我启动 tmux。


环境

Putty 配置

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 安装了 Solarized colors,也尝试了它们的 PuTTY colors。我这样做时又看了看 $TERM 选项,但我认为我没有做出任何尚未撤消的重大更改。
  • 内核头文件已更新,glibc 已更新。

故障排除

安装 zsh 并设置set-option -g default-shell /bin/zsh并未~/.tmux.conf解决问题。

su'ing 为 root 并从 root 启动 tmux 并不能解决问题。

答案1

我今天早上解决了这个问题,因此我发布了这个答案并给出了我的修复方法:

使固定

将 PuTTY 配置更改Connection -> Data -> Terminal-type stringxterm-256color


解释

好吧,这是 kLFT 的 terminfo 值之间的区别,它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但两者中它都被设置为相同的值。

在屏幕 256 色中,kcub1 的值相同,并且未设置 kLFT。

除此之外,我没有太多的解释——如果这一切对你来说有意义,请发表答案。

注意:我认为这在一周前使用 putty-256color 就可以正常工作,但我记得在安装 Solarized 时更改了一些 $TERM 选项,所以我猜我当时将其更改为 putty-256color 然后就忘记了它。

相关内容