bash / readlineを使用して端末の完成提案を「整理」できますか?

bash / readlineを使用して端末の完成提案を「整理」できますか?

zshを使用してtabコマンド、パス名、オプションなどを完成させると、潜在的な一致が複数あるときはいつでもプロンプトの下に提案が表示されます。
提案を選択すると、zsh は端末から提案リストを次のように削除します。

ここに画像の説明を入力してください。

イメージソース

代わりに、bashが完了提案を提供すると、リストを出力して新しいプロンプトに戻ります。

ここに画像の説明を入力してください。

イメージソース
私が使用していない提案は価値がなく、端末にさらに「ノイズ」を生成するため、zshの振る舞いは私にとってより良いです。
このようにzshのようなbash / readlineを設定できますか?

ベストアンサー1

簡単に言えば可能ですが、.inputrcバインディングほど複雑です。

Long:コメントで提案されているようにできるBashプロンプトとreadlineバインディングで同様の操作を実行します。

カーソルを保存/復元することは、画面の残りの部分を確実に消去できる唯一の点は、を押してEnter選択を完了するだけなので効果がありません。

にコントロールを渡すと、accept-line画面の残りの部分を消去するには遅すぎます。 readlineに複数のタスクを実行させるために、一連の物理的および一時的な「キーバインディング」を定義することは可能です(ただし複雑です)。例を見る

しかし、このアプローチはbashに文字を送り、readlineでコマンドを実行することに制限されています。これを行うためのreadlineコマンドはありません。

printf '\033[J'

明らか維持する画面。最も近いのはreadlineの組み込みclear-screenいいえあなたは何が欲しいですか)。バインディングは次のことを行う必要があります。

  • beginning-of-line
  • printf '\033[J';" "挿入
  • end-of-line
  • accept-line

これはend-of-linereadlineの問題を解決します。押すことができます。Enter どこかにオンライン。カーソルが行の中央にある場合、入力の一部のみが表示されます(bashは文字列全体を取得します)。

おすすめ記事