Red Hat linux下如何在ksh中使用“Ctrl + L”清屏?

Red Hat linux下如何在ksh中使用“Ctrl + L”清屏?

我正在使用 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的数组功能,可以轻松编写按键绑定功能
    它将把任何输入的按键序列映射到另一个按键序列。

相关内容