使箭头和删除键在KornShell命令行中起作用

20

我是Unix的新手,正在使用sun solaris (v10)操作系统。我的shell设置为KornShell(ksh)。

我想知道如何使箭头键和删除键在命令行中工作。我已经执行了set -o emacs命令,回退键有效,但箭头键和删除键无效。

同时,是否可以将上箭头键和下箭头键设置为循环浏览命令历史记录?

5个回答

36

对于箭头键,你可以将以下内容放入你的主目录下的 .kshrc 文件中:

set -o emacs
alias __A=`echo "\020"`     # up arrow = ^p = back a command
alias __B=`echo "\016"`     # down arrow = ^n = down a command
alias __C=`echo "\006"`     # right arrow = ^f = forward a character
alias __D=`echo "\002"`     # left arrow = ^b = back a character
alias __H=`echo "\001"`     # home = ^a = start of line
alias __Y=`echo "\005"`     # end = ^e = end of line

请注意等号左侧的字母之前有两个下划线字符。在等号右侧,目标是将正确的控制字符分配给别名。这个脚本实现这一点的方法是通过运行命令 (使用反引号)

echo "\020"

获取将控制字符"control-n"分配给 "__B"的方法。


2
如果您能告诉我上面的代码行是做什么的,那将会更有帮助。 - nikhil
此外,如果您没有 .kshrc 文件,请创建一个并将上述内容添加到其中。使用以下命令设置 ENV:“ENV=$HOME/.kshrc; export ENV”,通过发出“printenv”命令再次确保。 - RaMs_YearnsToLearn
请注意,pdksh和mksh都使用.mkshrc文件。 - thecarpy
__A是什么作用?这是任意的还是绑定向上箭头必要的?如果我想将删除键别名为^?,该怎么办? - knueser

10

我使用了以下代码,目前运行正常:

set -o emacs
注意:这些是实际的控制字符。在vi中,输入i ctrl-v,然后ctrl-P(如果您想要一个ctrl-p)。

注意:这些是实际的控制字符。在vi中,输入i ctrl-v,然后ctrl-P(如果您想要一个ctrl-p)。

alias _A=^P
alias _B=^N
alias _D=^B
alias _C=^F

并添加以下行:

alias __A=^P
alias __B=^N
alias __D=^B
alias __C=^F

7

不要与之抗争。 只需让管理员将您的默认shell更改为bash即可。 bash已包含在Solaris 10中,高度兼容ksh,并支持您喜欢的键映射。 您只需输入以下命令即可启动bash:

$ bash

如果管理员无法提供帮助,您可以在.profile中执行bash。以下是管理员将user1更改为bash的操作(作为root用户):
# passwd -e user1
Old shell: /bin/ksh
New shell: /usr/bin/bash        <- You type this, use whence bash to look up the path
passwd: password information changed for user1

Solaris 10 中没有 chsh 命令? - Josh Lee

0

默认的ksh可能是ksh88 - 不支持别名__键盘宏。 Ksh93可以。 基本上,如果不起作用,您可能正在使用ksh88。


0

由于我花费了很长时间才弄明白Mac上的删除键,为了让删除键正常工作,您可以将stty erase ^?添加到您的.kshrc文件中。而不是键入实际字符^?,您只需按下删除键即可输出^?。 因此,结合Tim的答案,我的.kshrc文件如下:

set -o emacs
alias __A=`echo "\020"`     # up arrow = ^p = back a command
alias __B=`echo "\016"`     # down arrow = ^n = down a command
alias __C=`echo "\006"`     # right arrow = ^f = forward a character
alias __D=`echo "\002"`     # left arrow = ^b = back a character
alias __H=`echo "\001"`     # home = ^a = start of line
alias __Y=`echo "\005"`     # end = ^e = end of line
stty erase                  # prevent command from being echoed
stty erase ^?               # allow for delete key to work

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接