如何以人類可讀的形式列印鍵盤快捷鍵?

如何以人類可讀的形式列印鍵盤快捷鍵?

如果有一種使用者友好的方式來概述當前定義的鍵盤快捷鍵,這將非常有用。換句話說,鑑於這些/etc/inputrc

"\e[A": history-search-backward
"\e[11~": backward-word

~/.inputrc線條

"\e[A": kill-word
"\e\eOD": backward-word

沒有必要遍歷這兩個文件來找出\e[A已被覆蓋的文件,有兩個替代的快捷方式backward-word,這\e\eOD意味著......無論它意味著什麼,這kill-word實際上意味著刪除到當前文件的末尾(或下)字。理想的解決方案會列印類似的內容

Delete until next word boundary: Meta-A
Go to the previous word boundary: F1; Ctrl-Left
Search history backwards: Meta-Up

(希望對轉義序列有更好了解的人可以修復快捷方式。)

Linux 下有列印這個的程式嗎?

我猜測這樣的程式可能是作業系統、核心、甚至鍵盤相關的,所以可能需要大量的配置(例如,一個通過showkeyxev按其他鍵輪詢用戶以確定真正發送哪些轉義序列的程式) ),但這對於最終了解​​如何有效地使用終端快捷方式來說是一個可以接受的價格。

答案1

簡短的回答是否定的,我很確定不存在這樣的程序。

原則上你可以建造一個;它必須查看 readline 配置和終端模擬器(不涉及核心和硬體)。

bind -P | grep 'can be found'Bash 中列出了按鍵綁定。

abort can be found on "\C-g", "\C-x\C-g", "\e\C-g".
accept-line can be found on "\C-j", "\C-m".

若要為命令提供更具描述性的名稱,您需要解析 bash 或 readline 文件。

按鍵序列和按鍵之間的對應關係由終端(通常是終端模擬器)決定。它通常不容易獲得,並且獲取它的方法完全特定於終端。

emacs -q -nw您可以在 Emacs 中進行類似的操作:在終端機中啟動,然後按Ctrl+ H, Cdescribe-key-briefly命令),然後按按鍵順序 ( \eis Escape)。這將向您顯示重建的功能鍵(如果有)以及該鍵在 Emacs 中的作用。 Readline 的預設綁定深受 Emacs 的啟發,因此 Emacs 中的函數通常與 readline 中的函數相似,但並非總是如此。例子:

Ctrl+H C ESC [ A
<up> runs the command previous-line

答案2

我遇到了同樣的問題,無法消化bindBash 內建指令的幾頁輸出,特別是在給出-p選項時。

因此,我在文件中定義了以下兩個函數.bashrc

alias def=function
alias val="declare -r"
alias var=declare
alias final="readonly -f"

def keyfunctions {
  if (( "$#" )); then
    var a
    OPTIND=1
    getopts ":auI:E:" a
  else
    var a=E
    OPTIND=1
    OPTARG='self-insert$|digit-argument$|do-lowercase-version$'
  fi
  case "$a" in
    a)
      bind -p |\
        sort |\
        pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
    ;;
    I)
      bind -p |\
        grep -E "$OPTARG" |\
        sort |\
        pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
    ;;
    E)
      bind -p |\
        grep -Ev '(^$)|^#|'"$OPTARG" |\
        sort |\
        pr -l1 -W"$COLUMNS" -"$(($COLUMNS/30))"
    ;;
    u|*)
      echo >&2 "$FUNCNAME: Usage: $FUNCNAME [-a|-i <eregex>|-e <eregex>]"
      echo >&2 "$FUNCNAME: Invoking $FUNCNAME without arguments assumes -E'self-insert$|digit-argument$|do-lowercase-version$'."
      val -i b="$((OPTIND-1))"
      if [[ "$OPTARG" == : ]]; then
        echo >&2 "$FUNCNAME: Error: Invalid argument \"$OPTARG\" at position $b."
      elif [[ "$OPTARG" == ? ]]; then
        echo >&2 "$FUNCNAME: Error: Invalid option \"$OPTARG\" at position $b."
      fi
    ;;
  esac
}
final keyfunctions

def keymacros {
  bind -s |\
    sort |\
    pr -l1 -W"$COLUMNS" -"$(($COLUMNS/40))"
}
final keyfunctions

只需執行以上兩個定義並決定您是否喜歡排序 ( sort) 和清單 ( pr -t) 輸出。列數width是固定的,列數與 的比值有關$(($COLUMNS/$width))

相關內容