私はしばしば次の位置にいます。bashプロンプトで長いコマンドを入力し始めましたが、途中で別のコマンドで何かをチェックする必要があることがわかりました。コンソール(Xなし)にいるとき、これは問題になります。これはよくあることです。そのため、次のような不十分な方法しかありません。
だから私が知りたいのは、これを行うよりエレガントな方法はありますか?一種のサブシェルコマンドまたは同様のもの?
準備や設定が不要な方法に最も興味があります。
alex's のやや高速なバージョン Ctrl+ACtrl+K (これは行の先頭に移動してからすべてを前方にカットします)を使用するだけです Ctrl+U、bashで後方にカットし、(現在の位置に関係なく)行全体をzshでカットします。次に使用します Ctrl+Y もう一度貼り付けます
Ctrl-Aを実行して行の先頭に移動し、ハッシュを先頭に付加してReturnキーを押します。これにより、コメントとしてコマンド履歴に残り、カーソルを上に移動して戻ることができます。
編集:これは#2の少しエレガントなバリアントであることに気づきました;)
ヒットCtrl+A
、Ctrl+K
で行の先頭に移動し、行末まで削除(kill)します。その後、調査を行い、準備ができたらCtrl+Y
(ヤンク)保存した(killed)行を元に戻します。
Zshでは、次のように入力します Ctrl+Z 入力しているコマンドを「中断」して、別のコマンドを入力します。そのコマンドを実行した後(または、 Ctrl+C)、中断されたコマンドは編集のために戻ってきます(カーソル位置を覚えていても)。追加の便宜として、入力時にコマンドラインが空の場合 Ctrl+Z、キーは代わりにbg
ビルトインを呼び出します(したがって、double Ctrl+Z 実行中のコマンドを直接バックグラウンドに送信します)。
fancy-ctrl-z () {
emulate -LR zsh
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle Push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
私はbashで同様のことをする方法を知りません。
どのシェルでも、ローテクな方法で #
現在の行の先頭 。
Bashでは、次のように入力します Alt+#。
準備ができたら、 Up その後 Alt+#。
最初は#
は、行の先頭でコメントに変換し、押した場合と同じように行を受け入れます。 Enter。
次に、2回目に実行すると、行にはすでに#
最初に、それを削除して受け入れ、再びあなたを保存します Enter キー。
2回目は別の#
、次に入力する必要があります Alt+-Alt+# 代わりに。
あなたが置くことによってzshに同じことをさせることができます
bindkey -M emacs '\e#' pound-insert
〜/ .zshrcにあります。
または、viバインディングを使用している場合は、次のように入力できます。 # bashとzshの両方のコマンドモードから。
zsh
の私のお気に入りの機能の1つは、組み込みのプッシュライン関数であり、ここで他の回答にあるハッカーを使わずにこれを処理します。私はそれに縛られています Ctrl+l 私の.zshrc
このようなファイル:
bindkey '^L' Push-line
次に、いくつかのコマンドを入力していて、何か他のことをすぐに実行する必要がある場合、1つのキーでそれを呼び出して空のプロンプトを表示できます。他のコマンドを実行した後、プロンプトには、以前に入力していた内容が自動的に入力されます。
これの複数のレイヤーをチェーンすることもでき、コマンドはキューにプッシュした順序とは逆の順序で返されます。
に加えて ctrl-actrl-k トリック、あなたが画面にいるなら、ちょうど ctrl-ad デタッチしてscreen -r
で再アタッチする
別のウィンドウを開いて ctrl+ac
完璧ではありませんが、代わりの方法としてCtrl-X
Ctrl-E
を押してください。ハーフタイプのコマンドを含むデフォルトのエディターが開きます。次に、コマンドをファイルに保存するか、エディター内から新しいシェルを開きます。新しいシェルを終了すると、エディターに戻り、コンテンツを保存すると自動的に実行されます。
元のシェルに戻らないため、これは完璧ではありませんが、コマンドの実行を強制するか、完全に破棄します。しかし、心配する一時的な選択やキルバッファはありません。また、いくつかの素敵な微調整もあります。エディタ= viの場合
:wq # execute the command
:cq # cancel and abort
:! command # execute command
:Shell # open a new Shell
:r filename # insert the contents of a file for editing
:r ! command # insert the output of a command for editing
Zshを使用して<ESC> q
(エスケープ、次にQ)と入力すると、プロンプト行がカットされ、別のコマンドを入力できるようになります。次のプロンプトで、カットしたテキストが自動的に返されます。
複数の行を同時に記憶できるので、行が待っている間も使用できます。空白行で使用して、カットラインの再開を遅らせることもできます。
チェック/準備のためにいくつかのコマンドを使用する必要がある場合、これは最も効率的な方法ではありません(各コマンドの前に<ESC> q
を再入力する必要があります)。しかし、それを短いショートカットにバインドすることは可能だと思います。
マニュアルを確認したいだけの場合は、<ESC> h
(エスケープしてからH)と入力します。これは、コマンドラインの最初のワードを引数として、run-help
ビルトインを実行します。一度完了すると、元のラインがそのまま表示されます。
行の先頭に#
を追加する方法と同様に、私が使用する間違いなく単純な方法があり、行の先頭に戻る必要はありません。
ただ開いている引用符を追加し、閉じないでくださいシングルかダブルか。
次に押す Enter。
次に押す CtrlC。
部分的なコマンドはコマンド履歴に保存されますが(上矢印で利用可能)、実際には実行されません。