zsh
「すべてのコマンドに対して実行できます」で、コマンドのマニュアルページを取得し、マニュアルページをEsc h終了してから、すべての引数を含むコマンドをインポートします。たとえば、私のシェルに次のように入力します。
zsh# tar -czvf docs.tgz docs
カーソルをどこかに置くと、tar
manを呼び出すことができます。Esc h
今私は同じことをしたいが、bashが欲しい。考えられる解決策の1つが以下に示されていますが、他の解決策もあるかどうかを知りたいです。
bind '"\eh": "\C-a\ef\C-k\C-f\C^Cman \C-y\C-m\C-y\C-y\ey"'
ベストアンサー1
コマンドラインの作業について話すときは、実際にはreadlineライブラリについて話します。 readlineバインディングの更新は、例のように、コマンドラインからreadlineのデフォルトの初期化ファイル/etc/inputrc
(確認echo $INPUTRC
)から実行するか、アカウントのローカル初期化を作成することによって実行できます~/.inputrc
。まだGNU readlineライブラリが見つからない場合(ここで試してください)
問題に関するいくつかの提案は次のとおりです。
提案1
\eh
zsh readlineを使用すると、zshを使用してアカウントのESC-h()へのキーバインディングを確認し、bashを使用してそのバインディングをアカウントにコピーできます。非常にスマートな何人かの人々はこれらの結合を結合し、調整なしで働きます。- zshアカウントのバインディングコマンド(
bind -P
[rawバインディング出力に小文字のpスイッチを使用])を使用して、zshアカウントのアクティブバインディングを確認します。 - バインディング出力で実際のコードをまとめる必要があるかもしれません。
- bashアカウントのバインディングに完全な行を追加します(上記で試したように)。
- zshアカウントのバインディングコマンド(
提案2
- 上記の例のパスに従ってください
この時点では、上記の例は機能しますが、わずかな調整が必要です。これは私にとって効果的です
"\eh": "\C-a\C-kman \e1\e.\C-m\C-y\M-y"
バインディングを/etc/inputrc.confに入れました。コマンドラインでキーシーケンスを使用してinputrcを再読み込みする必要がありますctrl+x ctrl+r
。
ただし、あなたの質問は、カーソルの下にある単語に対してこれを行う方法です。これは私にとって効果的です。
"\eh": "\ef\eb\ed\C-y\e#man \C-y\C-m\C-p\C-p\C-a\C-d"
簡単に言えば、次のように動作します。
キーシーケンスの場合\eh
(ESC+h)
- まず、単語の終わりを見つけてから開始(
\ef\eb
)を見つけます。 - 現在の単語(関心のある単語)を削除してもう一度入れてください(
\ed\C-y
)。これを終了バッファに入れる必要があります。 - コマンドライン全体をコメントアウトし、新しいプロンプト(
\e#
)に移動します。 - コマンドラインに「man」と入力します(スペースに注意してください)。
- 興味のあるコマンドをコマンドラインに貼り付けて実行します(
\C-y\C-m
)。 - コマンド履歴()で2番目(前の)エントリ(「man」、次に元のコマンド)を探します
\C-p\C-p
。 - 行の先頭に移動してコメント文字(
\C-a\C-d
)を削除します。
提案3
- emacsとviモードを使用するようにreadlineを設定します。あなたのお気に入りの非常に強力なエディタコマンドのほとんどは、キーバインディングで利用可能です。
注: 以前は、このオプションをバインディングとして実装したことはありませんが、コマンドラインでは使用します。 inputrcファイルまたはbashrcを介してそれらを設定できます。
- 入力rcから:
set editing-mode vi
- .bashrcから:
set -o vi
バインディングを実行するプロセスは、デフォルトのreadlineキーシーケンスに似ているようです。しかし、提案2の例を見ると、正しい方向に進むことができます。