コマンド入力中にman page / helpを見れるようにする

bind -xコマンドラインの状態を保持したまま任意のコマンドを実行するキーバインドを定義する。 これを使うと、zshのrun-helpのような機能を実装することができる。

if [[ -n "$PS1" ]]; then
    bind -x '"\eh":"[[ -n $READLINE_LINE ]] && man ${READLINE_LINE%% *}"'
    bind -x '"\e?":"[[ -n $READLINE_LINE ]] && (${READLINE_LINE%% *} --help) |& ${PAGER:-less}"'
fi

上のコードを~/.bashrcに書いておくと、コマンドライン入力中にM-hでman page、M-?でhelpを見ることができる。 ページャを閉じた後も元のコマンドラインが残っているので、引き続き引数などを入力することが可能。

便利。

2015-01-23追記

次のような関数を定義し、sudoを読み飛ばすようにした。

if [[ -n "$PS1" ]]; then
    bind -x '"\eh":"__look_at man"'
    bind -x '"\e?":"__look_at help"'

    __look_at() {
        local line="${READLINE_LINE##sudo }"
        local cmd="${line%% *}"
        if hash "$cmd" &>/dev/null; then
            if [[ "$1" == "man" ]]; then
                man "$cmd"
            elif [[ "$1" == "help" ]]; then
                "$cmd" --help |& ${PAGER:-less}
            fi
        fi
    }
fi