每当我使用 CTRL+箭头时,我的终端都会返回 ;5A;5D;5B;5C

每当我使用 CTRL+箭头时,我的终端都会返回 ;5A;5D;5B;5C

我正在使用CentOS Linux release 7.0.1406 (Core)并通过 ssh 进入以下系统:

$ uname -a
FreeBSD X 9.2-RELEASE-p5 FreeBSD 9.2-RELEASE-p5 #0 r265974: Wed May 14 07:57:04 PDT 2014     root@X:/usr/obj/usr/src/sys/R610  amd64
$ 

每当我尝试像在 Linux 终端中那样使用CTRL+arrow时,都会出现以下情况:

[alexus@j ~]$ ;5A;5D;5B;5C

我的Linux $TERM

[alexus@wcmisdlin02 Desktop]$ echo $TERM
xterm-256color
[alexus@wcmisdlin02 Desktop]$ 

该如何解决这个问题呢?

* 更新 *

user8558

[alexus@wcmisdlin02 Desktop]$ tail -4 /etc/inputrc 
# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif
[alexus@wcmisdlin02 Desktop]$ 

答案1

以下解决了我的问题:

[root@j ~]# tail -1 /etc/profile 
export INPUTRC=/usr/local/etc/inputrc
[root@j ~]# cat /usr/local/etc/inputrc 
"\e[1;5C": forward-word
"\e[1;5D": backward-word
[root@j ~]# 

答案2

查看 /etc/termcap 或 /etc/terminfo(不确定 FreeBSD 使用哪一个)中是否有 termcap 条目xterm-256color

如果是,那么它可能出错了(或者您所使用的程序没有正确使用终端信息,而是尝试手动解析终端代码;如果您的 FreeBSD 上有 GNU Bash 版本,请尝试启动此版本并在其中重现它,因为众所周知它可以正确使用 termcap/terminfo)。也许您可以找到一些兼容性设置来.termcap解决这个问题。

如果没有,请找一些示例来添加(或重新编译 termcap/terminfo,如果有较新的版本),或者更改终端仿真器(我假设xterm)的设置以模拟不同的终端(如xtermlinuxrxvt)。

也许这个有帮助: https://forums.freebsd.org/threads/howto-escape-from-rxvt-unicode-256color-termcap-terminfo-and-screen-hell.13345/

答案3

环境TERM变量可能还不够,因为我们讨论的不是光标移动操作,而是命令行编辑工具。你需要在命令行编辑库中设置哪个命令可以启用光标在不同方向上的移动。

您的 shell 可能是 bash,它使用 readline 库进行命令行编辑。可以使用配置文件/etc/inputrc.inputrc您主目录中的配置来配置此库。

您需要在其中设置的内容:(示例来自这里)。

 # Arrow keys in 8 bit ANSI mode
 #
 "\M-\C-[D"       backward-char
 "\M-\C-[C"       forward-char
 "\M-\C-[A"       previous-history
 "\M-\C-[B"       next-history

实际序列(在第一列)可能会根据您的特殊情况而改变,但这可能会起作用。

相关内容