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


24

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

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

$ echo "foo bar
> baz
>

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

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


受け入れられた答えは、解決策はありませんが、あります。以下を
-cdosborn

回答:


16

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

  1. 改行の代わりにセミコロンを使用します。ただし、一度に画面行を上に移動することはできませんが、文字または単語の移動コマンドを使用する必要があります。(奇妙なことにzsh、少なくとも現在のコマンド内ではなく、履歴を編集する際に複合コマンド内で移動できます。)fc複合コマンドを処理する最も簡単な方法は(前のコマンドでエディターに投げ込まれます)。

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

    ctrl x e

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


1
bashのマニュアルページでは、使用するエディターを変更する方法について説明しています。編集および実行コマンド(C-xC-e)-現在のコマンドラインでエディターを呼び出し、シェルコマンドとして結果を実行します。Bashは、$ VISUAL、$ EDITOR、およびemacsを順に編集しようとします。
マシュー

エディターを開かずに解決策があります。
-cdosborn

技術的にはbashではなく、bashが入力を取得するために使用する「readline」ライブラリです。
クリスチャンヘレンツ

11

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

溶液

@riciの回答の功績


4

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

あなたがいるとき

$ echo "foo bar
> baz
>

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

$ echo "foo bar
baz

これLeft Rightで、ラインジャンプを使用して移動できます。

癖は1つだけです。別の行を追加するには最後の文字に移動する必要があります。既存の行を編集する(開始するにはCtrl+A)、Enter それが十分であれば押して終了Ctrl+E、行を追加するには終了()を押しEnterます。別の欠点は、Ctrl+_(元に戻す)最後からの変更のみを復元することですCtrl+C


-2

コマンドをコピーしてメモ帳に貼り付け、そこからフォーマットします。その後、コマンドを端末にコピーして戻すことができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.