
Seria muito útil ter uma maneira fácil de obter uma visão geral dos atalhos de teclado definidos atualmente. Em outras palavras, dadas as /etc/inputrc
linhas
"\e[A": history-search-backward
"\e[11~": backward-word
e ~/.inputrc
linhas
"\e[A": kill-word
"\e\eOD": backward-word
não deveria ser necessário passar por ambos os arquivos para descobrir que \e[A
foi substituído, que existem dois atalhos alternativos para backward-word
, isso \e\eOD
significa ... o que quer que isso signifique, e isso kill-word
na verdade significa excluir até o final do atual (ou próxima) palavra. A solução ideal seria imprimir algo como
Delete until next word boundary: Meta-A
Go to the previous word boundary: F1; Ctrl-Left
Search history backwards: Meta-Up
(Espero que alguém com um melhor entendimento das sequências de escape possa consertar os atalhos.)
Existe um programa Linux para imprimir isso?
Eu estou supondo que tal programa pode ser dependente do sistema operacional, do kernel ou até mesmo do teclado, então talvez ele precise de uma configuração extensa (um programa que pesquisa o usuário showkey
ou xev
pressiona teclas diversas para estabelecer quais seqüências de escape são realmente enviadas, por exemplo ), mas seria um preço aceitável para finalmente entender como usar os atalhos do terminal com eficiência.
Responder1
A resposta curta é não, tenho certeza de que tal programa não existe.
Você poderia, em princípio, construir um; seria necessário examinar a configuração do readline e o emulador de terminal (o kernel e o hardware não estão envolvidos).
bind -P | grep 'can be found'
no Bash lista as combinações de teclas.
abort can be found on "\C-g", "\C-x\C-g", "\e\C-g".
accept-line can be found on "\C-j", "\C-m".
Para ter um nome mais descritivo para o comando, você precisa analisar a documentação do bash ou do readline.
A correspondência entre sequências de teclas e teclas é determinada pelo terminal (geralmente, o emulador de terminal). Muitas vezes não está prontamente disponível e quando é o método para obtê-lo é totalmente específico para o terminal.
Você pode chegar perto no Emacs: inicie emacs -q -nw
em um terminal e pressione Ctrl+ H, C(o describe-key-briefly
comando) e depois a sequência de teclas ( \e
is Escape). Isso mostra a tecla de função reconstruída, se houver, e o que a tecla faz no Emacs. As ligações padrão do Readline são fortemente inspiradas no Emacs, muitas vezes a função no Emacs é semelhante à função no readline, mas nem sempre. Exemplo:
Ctrl+H C ESC [ A
<up> runs the command previous-line
Responder2
Eu tive o mesmo problema ao não conseguir digerir as várias páginas de saída do bind
comando interno do Bash, especialmente quando tive a -p
opção.
Portanto, criei as duas funções a seguir que defini em meu .bashrc
arquivo:
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
Basta executar as duas definições acima e decidir se você gosta da saída classificada ( sort
) e tabulada ( pr -t
). O número width
de colunas é fixo, o número de colunas está relacionado à proporção de $(($COLUMNS/$width))
.