如果有一种用户友好的方式来概述当前定义的键盘快捷键,这将非常有用。换句话说,鉴于这些/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))
。