更改 ksh 中显示先前命令行的键

更改 ksh 中显示先前命令行的键

在 Linux 上的大多数 shell 中,当您按下该Up-arrow键时,它会显示命令行历史记录中的上一个命令行。

我的问题是,对于ksh外壳,

  1. 如何设置其他键以使其显示上一个命令行?

  2. 我如何禁用Up-arrow以便它不显示上一个命令行?

答案1

您能找到的大多数教程都是关于 bash 的。 Ksh 非常擅长脚本编写,但不擅长交互使用。如果可以的话,使用 zsh(最好)或 bash(第二好)作为命令行。

目前 ksh 有两种主要实现:实际的 Korn shell ksh93 和克隆 mksh(源自长期无人维护的 pdksh)。它们有不同的键绑定设施。

在 ksh93 中,默认情况下UpDown键不会在命令行历史记录中移动。默认键是Ctrl+PCtrl+ N。您可以通过陷阱更改键绑定KEYBD;它相当笨拙,因为您只能将键转换为其他键,并且所有绑定都必须在同一位置定义。以下是如何创建UpDown导航历史记录(此代码进入~/.kshrc):

set -o emacs
function KEYBD_trap {
  case ${.sh.edchar} in
    $'\e'[[O]A) .sh.edchar=$'\e>';;
    $'\e'[[O]B) .sh.edchar=$'\e<';;
  esac
}
trap KEYBD_trap KEYBD

\e[A\eOA,其中\e代表ASCII 转义字符,是用户按下按键时终端可能发送的两个转义序列Up(这取决于终端及其当前模式)。同样,\e[B\eOB是为Down$'\e是可在 ksh 中用于转义字符的表示法;该模式[[O]匹配 a[或 a O

在 mksh 中,您可以通过内置定义键绑定bindUpDown默认导航历史记录(除了 kbd>Ctrl+PCtrl+ N)。以下代码(将放在 中~/.mkshrc)禁用箭头键:

bind '^[OA'=
bind '^[[A'=
bind '^[OB'=
bind '^[[B'=

^[是可以在 mskh 键绑定中用于转义字符的表示法。

所有这些信息都在 shell 的手册页中,如果您还不熟悉 Unix shell,则不一定采用可以理解的形式。

相关内容