在 Linux 上的大多数 shell 中,当您按下该Up-arrow键时,它会显示命令行历史记录中的上一个命令行。
我的问题是,对于ksh
外壳,
如何设置其他键以使其显示上一个命令行?
我如何禁用键Up-arrow以便它不显示上一个命令行?
答案1
您能找到的大多数教程都是关于 bash 的。 Ksh 非常擅长脚本编写,但不擅长交互使用。如果可以的话,使用 zsh(最好)或 bash(第二好)作为命令行。
目前 ksh 有两种主要实现:实际的 Korn shell ksh93 和克隆 mksh(源自长期无人维护的 pdksh)。它们有不同的键绑定设施。
在 ksh93 中,默认情况下Up和Down键不会在命令行历史记录中移动。默认键是Ctrl+P和Ctrl+ N。您可以通过陷阱更改键绑定KEYBD
;它相当笨拙,因为您只能将键转换为其他键,并且所有绑定都必须在同一位置定义。以下是如何创建Up和Down导航历史记录(此代码进入~/.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 中,您可以通过内置定义键绑定bind
。Up并Down默认导航历史记录(除了 kbd>Ctrl+P和Ctrl+ N)。以下代码(将放在 中~/.mkshrc
)禁用箭头键:
bind '^[OA'=
bind '^[[A'=
bind '^[OB'=
bind '^[[B'=
^[
是可以在 mskh 键绑定中用于转义字符的表示法。
所有这些信息都在 shell 的手册页中,如果您还不熟悉 Unix shell,则不一定采用可以理解的形式。