Korn Shell:End、pgup、pgdown 和 delete 键不起作用

shi*_*hix 8 shell freebsd ksh keyboard emacs

所以基本上我的End, Pageup/PagedownDeletekey 在 ksh93 中不起作用。顺便说一下,我正在运行 FreeBSD。

我的箭头键工作正常,我的主页键也是如此。

当我把它放在我的 .kshrc

set -o emacs
Run Code Online (Sandbox Code Playgroud)

我试图做,通过把这个在我的.kshrc。使End关键工作。

alias __Y=`echo "\005"`     # end = ^e = end of line
Run Code Online (Sandbox Code Playgroud)

我打开 vim,按下Ctrlv,然后输入005。并且^E出现了。尽管如此,没有任何效果。

反正有人知道让那些钥匙工作吗?

此外,当我按下这些键时,它会打印出一个~. 我也知道我可以使用Ctrld,或者Ctrla,我不想使用这些。

Gil*_*il' 7

该答案特定于某些终端模拟器,我认为它不能在 Solaris 之外推广。

在 ksh 中,按Ctrl+V然后按End。这将插入一个文字转义字符,然后是密钥发送的其余转义序列。例如,您可能会看到^[[4~^[开头的实际上是一个转义字符,^后面没有[)。对要重新配置的其他光标键执行相同操作。

在您的 中.kshrc,设置一个KEYBD 陷阱,以将来自功能键的转义序列转换为您希望该键调用的命令的绑定。例如(你可能需要调整转义序列——注意$'…',\e`里面的意思是一个转义字符):

keybd_trap () {
  case ${.sh.edchar} in
    $'\e[1~') .sh.edchar=$'\001';; # Home = beginning-of-line
    $'\e[4~') .sh.edchar=$'\005';; # End = end-of-line
    $'\e[5~') .sh.edchar=$'\e>';; # PgUp = history-previous
    $'\e[6~') .sh.edchar=$'\e<';; # PgDn = history-next
    $'\e[3~') .sh.edchar=$'\004';; # Delete = delete-char
  esac
}
trap keybd_trap KEYBD
set -o emacs
Run Code Online (Sandbox Code Playgroud)