私はしばしば、長いコマンド(または一連のコマンド)を書いている間に、現在のコマンドを完了する前に別のコマンドを実行する必要があることに気づきます。
はい
時々私は...
- ネットワークインタフェースの正確な名前を見つける必要があります(
wlp2s0b1
--blagh)。 - 特定のコマンドの文書を確認する必要があります。
- デーモンプロセスと通信するには、開始する必要があります(などを使用して
systemctl
)。service
- sudoを使用してコマンドを実行したがタブの完成が機能しない場合は、
sudo ls
作業中のディレクトリに対する権限がないため、ディレクトリが必要です。
私にとって理想的な解決策は、キーボードショートカットを使用して現在のコマンドをスタックにプッシュして行を消去し、スタックの最上位コマンドを入力行に入れる別のコマンドを使用することです。
現在使用されているいくつかの解決策は次のとおりです。
- マウスを使用して端末からコマンドを選択し(使用可能なグラフィック端末がある場合)、コピーして準備ができたら貼り付けます。(遅い);
- Enterキーを押して(コンテンツを削除するのではなくコマンドが失敗することを願っています)、↑次のように復元します。(危険);
- 再入場する(時間がかかる)
これをよりよく達成する方法についての提案はありますか?可能であれば使用しますzsh
。しかし、同じように効率的な解決策があれば、bash
大いに感謝します。
ベストアンサー1
zshの場合、この効果にバインドできる3つのウィジェットがあります。、、push-input
(push-line
参照push-line-or-edit
)man 1 zshzle
より多くの情報を知りたい場合)。トッププロンプト(PS1)両方とも同じように動作します。現在のバッファがバッファスタックにプッシュされ、消去されます。次のプロンプトで(またはウィジェットが呼び出されるとget-line
)、バッファはスタックからポップされ、編集バッファにロードされます。これはまた、複数のコマンドを保留できることを意味します。
デフォルトでは(+、機能しない可能性があります)、(+ +または、+)、および(+または、)push-line
にバインドされます。しかし、他のコンボに簡単に結び付けることができます。たとえば、+の場合:^Q
Ctrlq^[Q
AltShiftqEscShiftq^[q
AltqEscqbindkey
Alth
bindkey '^[h' push-line
前述のように、これら3つのウィジェットはトップレベルのプロンプトで同じように機能します。ただし、複数行入力補助プロンプトの場合は異なります(PS2)。
push-input
常に複数行の構造をバッファにプッシュしてください。これが最後のヒント以降のすべてです。トップレベルのプロンプトに戻ります。
push-line
現在の行だけがバッファにプッシュされます。最後のメッセージ以降、それはすべてです。それでも同じプロンプトレベルを維持します。
push-line-or-edit
現在、複数行構造全体をエディタバッファ(いいえスタック)。これが本質的にすることは、
push-input
すぐにスタックからバッファを取り出すことです。
これらのウィジェットの対応は、get-line
バッファから一番上の行をポップしてカーソル位置に挿入することです。 Emacsモードでは、^[G
(Alt+ Shift+gまたはEsc、Shift+ g)および^[g
(Alt+gまたはEsc、g)にバインドされます。
効果的に使用するには、push-line-or-edit
コマンドラインを編集するために必要ないくつかのコマンド(単語と行をコピーして貼り付ける、新しい行を挿入する(コマンドを実行せずに)など)を知っている必要があります(または学びたい)。それ以外の場合、およびpush-line
/またはを使用することをお勧めしますpush-input
。