私が部分的に書いたコマンドに戻る[複製]

私が部分的に書いたコマンドに戻る[複製]

私はしばしば、長いコマンド(または一連のコマンド)を書いている間に、現在のコマンドを完了する前に別のコマンドを実行する必要があることに気づきます。

はい

時々私は...

  • ネットワークインタフェースの正確な名前を見つける必要があります(wlp2s0b1--blagh)。
  • 特定のコマンドの文書を確認する必要があります。
  • デーモンプロセスと通信するには、開始する必要があります(などを使用してsystemctl)。service
  • sudoを使用してコマンドを実行したがタブの完成が機能しない場合は、sudo ls作業中のディレクトリに対する権限がないため、ディレクトリが必要です。

私にとって理想的な解決策は、キーボードショートカットを使用して現在のコマンドをスタックにプッシュして行を消去し、スタックの最上位コマンドを入力行に入れる別のコマンドを使用することです。

現在使用されているいくつかの解決策は次のとおりです。

  • マウスを使用して端末からコマンドを選択し(使用可能なグラフィック端末がある場合)、コピーして準備ができたら貼り付けます。(遅い);
  • Enterキーを押して(コンテンツを削除するのではなくコマンドが失敗することを願っています)、次のように復元します。(危険);
  • 再入場する(時間がかかる)

これをよりよく達成する方法についての提案はありますか?可能であれば使用しますzsh。しかし、同じように効率的な解決策があれば、bash大いに感謝します。

ベストアンサー1

zshの場合、この効果にバインドできる3つのウィジェットがあります。、、push-inputpush-line参照push-line-or-editman 1 zshzleより多くの情報を知りたい場合)。トッププロンプト(PS1)両方とも同じように動作します。現在のバッファがバッファスタックにプッシュされ、消去されます。次のプロンプトで(またはウィジェットが呼び出されるとget-line)、バッファはスタックからポップされ、編集バッファにロードされます。これはまた、複数のコマンドを保留できることを意味します。

デフォルトでは(+、機能しない可能性があります)、(+ +または、+)、および(+または、)push-lineにバインドされます。しかし、他のコンボに簡単に結び付けることができます。たとえば、+の場合:^QCtrlq^[QAltShiftqEscShiftq^[qAltqEscqbindkeyAlth

bindkey '^[h' push-line

前述のように、これら3つのウィジェットはトップレベルのプロンプトで同じように機能します。ただし、複数行入力補助プロンプトの場合は異なります(PS2)。

  • push-input

    常に複数行の構造をバッファにプッシュしてください。これが最後のヒント以降のすべてです。トップレベルのプロンプトに戻ります。

  • push-line

    現在の行だけがバッファにプッシュされます。最後のメッセージ以降、それはすべてです。それでも同じプロンプトレベルを維持します。

  • push-line-or-edit

    現在、複数行構造全体をエディタバッファ(いいえスタック)。これが本質的にすることは、push-inputすぐにスタックからバッファを取り出すことです。


これらのウィジェットの対応は、get-lineバッファから一番上の行をポップしてカーソル位置に挿入することです。 Emacsモードでは、^[GAlt+ Shift+gまたはEscShift+ g)および^[gAlt+gまたはEscg)にバインドされます。


効果的に使用するには、push-line-or-editコマンドラインを編集するために必要ないくつかのコマンド(単語と行をコピーして貼り付ける、新しい行を挿入する(コマンドを実行せずに)など)を知っている必要があります(または学びたい)。それ以外の場合、およびpush-line/またはを使用することをお勧めしますpush-input

おすすめ記事