我正在使用 putty 连接到 Red hat linux 服务器。我的 linux 下的 shell 是 Korn shell。我习惯使用“Ctrl + l”组合来清除屏幕。一些这个组合在 Ksh 下不起作用的原因。如果我ctrl + l
在 ksh 中输入“”,它会将我带到新行。
我试过
alias "^L"=clear
还是一样的结果。
我也尝试过
bind -m '^L'=clear'^J'
但它说找不到绑定命令。我无法在机器上安装任何新内容。
您能建议如何解决这个问题吗?谢谢。
答案1
Red Hat 提供了“ksh-93”,它没有bind
命令。它提供了名为 的东西KEYBD
,它是通过特殊trap
函数触发的。根据手册页,可以用来修改Emacs 编辑模式。
示例位于[Korn Shell] 修复 Home、End、pgup、pgdown 和删除键^L
是展示如何使屏幕清晰的有用起点。默认情况下,metacontrolL( ^[^L
) 绑定到清屏功能,而 plain^L
只是您要更改的下一行:
^L Line feed and print current line.
M-^L Clear the screen.
只需在示例中添加一行即可完成所要求的操作:
set -o emacs
keybd_trap () {
case ${.sh.edchar} in
$'\f') .sh.edchar=$'\e\f';; # clear-screen (THIS QUESTION)
$'\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
无论出于何种原因,vi 模式在ksh
.
该文档对于按键实际上如何映射到功能的描述含糊不清。对于本例,该功能src/cmd/ksh93/edit/emacs.c
作为 switch/case 语句的一部分实现:
#ifdef _cmd_tput
case cntl('L'): /* clear screen */
sh_trap("tput clear", 0);
draw(ep,REFRESH);
return(-1);
#endif
在转义函数中(即处理“meta”)。因此,它是可以自定义的内置行为。
进一步阅读:
Q4。键绑定是如何完成的? A4。 ksh93 提供了一个 KEYBD 陷阱,只要按下一个键就会执行该陷阱 是从键盘输入的。使用这个陷阱,和同伙 ksh93的数组功能,可以轻松编写按键绑定功能 它将把任何输入的按键序列映射到另一个按键序列。
- 10.3.自定义编辑模式(学习 Korn Shell)