Keyboard-Shortcuts

更改在 ksh 中顯示先前命令行的鍵

  • December 31, 2018

在 Linux 上的大多數 shell 中,當您按下該Up-arrow鍵時,它會顯示命令行歷史記錄中的先前命令行。

我的問題是,對於ksh外殼,

  1. 如何設置其他鍵以顯示上一個命令行?
  2. 如何禁用Up-arrow鍵以使其不顯示上一個命令行?

您可以找到的大多數教程都是關於 bash 的。Ksh 非常擅長編寫腳本,但不擅長互動使用。如果可以,請使用 zsh(最佳)或 bash(次佳)作為命令行。

今天有兩個主要的 ksh 實現:實際的 Korn shell ksh93 和複製 mksh(源自長期無人維護的 pdksh)。它們有不同的鍵綁定工具。

在 ksh93 中,UpandDown鍵預設不會在命令行歷史記錄中移動。預設鍵是Ctrl+PCtrl+ NKEYBD您可以通過陷阱更改鍵綁定;它相當笨拙,因為您只能將鍵轉換為其他鍵,並且所有綁定都必須在同一個地方定義。以下是如何製作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和代表ASCII 轉義字元\eOA,是使用者按鍵時終端可能發送的兩個轉義序列(取決於終端及其目前模式)。同樣和為。是可以在 ksh 中用於轉義字元的符號;模式匹配 a或 a 。\e``Up``\e[B``\eOB``Down``$'\e``[[O]``[``O

在 mksh 中,您通過bind內置函式定義鍵綁定。UpDown預設瀏覽歷史記錄(除了 kbd>Ctrl+PCtrl+ N)。以下程式碼(要放入~/.mkshrc)禁用箭頭鍵:

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

^[是您可以在 mskh 鍵綁定中為轉義字元使用的符號。

所有這些資訊都在 shell 的手冊頁中,如果您不熟悉 Unix shell,則不一定是可以理解的形式。

引用自:https://unix.stackexchange.com/questions/294592