
如果有一種使用者友好的方式來概述當前定義的鍵盤快捷鍵,這將非常有用。換句話說,鑑於這些/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 下有列印這個的程式嗎?
我猜測這樣的程式可能是作業系統、核心、甚至鍵盤相關的,所以可能需要大量的配置(例如,一個通過showkey
或xev
按其他鍵輪詢用戶以確定真正發送哪些轉義序列的程式) ),但這對於最終了解如何有效地使用終端快捷方式來說是一個可以接受的價格。
答案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, C(describe-key-briefly
命令),然後按按鍵順序 ( \e
is Escape)。這將向您顯示重建的功能鍵(如果有)以及該鍵在 Emacs 中的作用。 Readline 的預設綁定深受 Emacs 的啟發,因此 Emacs 中的函數通常與 readline 中的函數相似,但並非總是如此。例子:
Ctrl+H C ESC [ A
<up> runs the command previous-line
答案2
我遇到了同樣的問題,無法消化bind
Bash 內建指令的幾頁輸出,特別是在給出-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))
。