web-dev-qa-db-ja.com

何かをチェックしている間、ハーフタイプのコマンドを覚えておいてください

私はしばしば次の位置にいます。bashプロンプトで長いコマンドを入力し始めましたが、途中で別のコマンドで何かをチェックする必要があることがわかりました。コンソール(Xなし)にいるとき、これは問題になります。これはよくあることです。そのため、次のような不十分な方法しかありません。

  • ヒット ctrl+alt+F2 別の仮想コンソールにログインして、欲しいものを見つけたら、戻って続行します
  • ctrl+a、echo +と入力します spaceenter、私が欲しかったものを見つけて、押してください  コマンドを見つけるまで ctrl+a、 del x 5 ctrl+e、続けて
  • これまでに入力した内容をマウスで強調表示します(通常はgpmが実行されている場合)。 ctrl+c 中断するには、マウスを使用してアイテムを強調表示しないように注意しながら、必要なものを見つけ、新しいプロンプトでマウスの中央ボタンを押して続行します
  • 半分書かれたコマンドが悪影響を及ぼさないだけで失敗することをコマンドラインの神々に祈り、Enterキーを押し続け、必要なものを見つけて、コマンドが返されるまで上矢印を押して続行します。
  • 私のタイムマシンに飛び込んで、時間を遡って、コマンドの入力を開始する前に画面を開始することを思い出して、現在に戻って押してください。 ctrl+ac、私が欲しかったものを見つけ、プレス ctrl+actrl+a、続けて

だから私が知りたいのは、これを行うよりエレガントな方法はありますか?一種のサブシェルコマンドまたは同様のもの?

準備や設定が不要な方法に最も興味があります。

100

alex's のやや高速なバージョン Ctrl+ACtrl+K (これは行の先頭に移動してからすべてを前方にカットします)を使用するだけです Ctrl+U、bashで後方にカットし、(現在の位置に関係なく)行全体をzshでカットします。次に使用します Ctrl+Y もう一度貼り付けます

70
Michael Mrozek

Ctrl-Aを実行して行の先頭に移動し、ハッシュを先頭に付加してReturnキーを押します。これにより、コメントとしてコマンド履歴に残り、カーソルを上に移動して戻ることができます。

編集:これは#2の少しエレガントなバリアントであることに気づきました;)

52
jamespo

ヒットCtrl+ACtrl+Kで行の先頭に移動し、行末まで削除(kill)します。その後、調査を行い、準備ができたらCtrl+Y(ヤンク)保存した(killed)行を元に戻します。

29
alex

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の両方のコマンドモードから。

13
Mikel

zshの私のお気に入りの機能の1つは、組み込みのプッシュライン関数であり、ここで他の回答にあるハッカーを使わずにこれを処理します。私はそれに縛られています Ctrl+l 私の.zshrcこのようなファイル:

bindkey '^L' Push-line

次に、いくつかのコマンドを入力していて、何か他のことをすぐに実行する必要がある場合、1つのキーでそれを呼び出して空のプロンプトを表示できます。他のコマンドを実行した後、プロンプトには、以前に入力していた内容が自動的に入力されます。

これの複数のレイヤーをチェーンすることもでき、コマンドはキューにプッシュした順序とは逆の順序で返されます。

10
Caleb

に加えて ctrl-actrl-k トリック、あなたが画面にいるなら、ちょうど ctrl-ad デタッチしてscreen -rで再アタッチする

別のウィンドウを開いて ctrl+ac

5
warren

完璧ではありませんが、代わりの方法としてCtrl-XCtrl-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
4
forcefsck

Zshを使用して<ESC> q(エスケープ、次にQ)と入力すると、プロンプト行がカットされ、別のコマンドを入力できるようになります。次のプロンプトで、カットしたテキストが自動的に返されます。

複数の行を同時に記憶できるので、行が待っている間も使用できます。空白行で使用して、カットラインの再開を遅らせることもできます。

チェック/準備のためにいくつかのコマンドを使用する必要がある場合、これは最も効率的な方法ではありません(各コマンドの前に<ESC> qを再入力する必要があります)。しかし、それを短いショートカットにバインドすることは可能だと思います。


マニュアルを確認したいだけの場合は、<ESC> h(エスケープしてからH)と入力します。これは、コマンドラインの最初のワードを引数として、run-helpビルトインを実行します。一度完了すると、元のラインがそのまま表示されます。

3
loxaxs

行の先頭に#を追加する方法と同様に、私が使用する間違いなく単純な方法があり、行の先頭に戻る必要はありません。

ただ開いている引用符を追加し、閉じないでくださいシングルかダブルか。

次に押す Enter

次に押す CtrlC

部分的なコマンドはコマンド履歴に保存されますが(上矢印で利用可能)、実際には実行されません。

3
Wildcard

最近、このためのスクリプトを作成しました。ただ Ctrl+b コマンドラインを記憶/復元します。

ダウンロード:

リポジトリ にアクセスします。

デモ:

demo

0
ynn