Em uma função que é ligada a uma chave, você pode acessar e modificar o conteúdo atual da linha de comando através das variáveis READLINE_LINE
e READLINE_POINT
. Prova de conceito (código não testado):
synopsis () (
set -f
IFS=$'\t\n\r ;&|'
words=($READLINE_LINE)
while [[ "${words[1]}" == @([<>]*|[A-Za-z0-9_]##=) ]]; do
shift words
done
command=${words[1]}
"$command" --help
)
bind -x '"\C-h": synopsis'
O método que você tentou com a expansão do histórico não funciona. A expansão do histórico é executada quando uma linha de comando é executada. Ao invocar uma ligação, não há histórico para expandir.
Mas o seu problema fundamental é que sua concha não é legal o suficiente . Esse recurso já existe no zsh, chamado run-help
.
bash$ echo 'autoload run-help' >~/.zshrc bash$ zsh darkstar% ls -FAlt+h