web-dev-qa-db-ja.com

Bashの複数行コマンドで前の行を編集するにはどうすればよいですか?

Bashで複数行にまたがるコマンドを入力するとき、以前の行を編集するにはどうすればよいですか?私はGNOMEターミナルを使用しているLinux Mint(Lisa)ユーザーです。

たとえば、次のように入力したとします。

$ echo "foo bar
> baz
>

そして、コマンドの3行目を入力しようとすると、突然 "foo"と "bar"を別々の行に置きたいことに気づきます。 Enterキーを押して別の行に置くことができるように、カーソルを「foo」と「bar」の間に再配置するにはどうすればよいですか?

(あなたが思うようにそれは簡単ではありません。上矢印は機能せず、Ctrl-Pも機能しません。そのため、投稿する前に試してください!ありがとう!)

24
Asher Walther

残念ながら、それは端末ではなくbashまでです。オプションは次のとおりです。

  1. 改行ではなくセミコロンを使用します。ただし、一度に画面の行を上に移動することはできませんが、文字またはWordのモーションコマンドを使用する必要があります。 (奇妙なことに、zshを使用すると、currentコマンド内ではなく、履歴の編集時に複合コマンド内で移動できます。)時々fc(前のコマンドを使用してエディターに放り込む)は、複合コマンドを処理する最も簡単な方法です。

  2. Bashを使用している場合は、次のキーの組み合わせを使用します。

    ctrl x e
    

    テキストエディタを使用して作業しているコマンドが開きます。ファイルを保存して終了します。 (私は Shell Haterのプレゼンテーション でコマンドを見つけました。)Zshユーザーは この代替案 を持っています。

19
geekosaur

解決策は、複数行が正しくなるまでコマンドを入力しないことです。次のように入力します。 CtrlvCtrlj 次の行に行きたいとき。 Metab 言葉に戻る。

solution

@riciのクレジット answer

11
cdosborn

おかしなことに、 Ctrl+C あなたが探しているものです。

あなたがいるとき

$ echo "foo bar
> baz
>

押すだけ Ctrl+C (編集されたコマンドラインは一時停止します)そして押す Up (前の履歴)。プロンプトは次のようになります:(>がないことに注意してください)

$ echo "foo bar
baz

今、あなたは一緒に動き回ることができます LeftRight ラインジャンプでも。

奇妙な点は1つしかありません。別の行を追加するには最後のキャラクターにいる必要があるため、移動して既存の行を編集してください(最初に Ctrl+A)プレス Enter それで十分な場合、または最後に移動した場合(Ctrl+E)行を追加するには Enter。別の欠点は、 Ctrl+_ (元に戻す)最後からの変更のみを復元します Ctrl+C

4
albfan