既存のプロンプトコマンドラインを数行に分割する


8

コマンドラインの\ enter最後に入力して、bashそのコマンドを別の行に続けることができることを理解しています。しかし、プロンプトコマンドライン(既に完全に入力されているもの)を2つに分割するにはどうすればよいでしょうか。

たとえばthen、残りを切り取ってもう一度入力しなくても、直前にこの行を分割するにはどうすればよいですか?

$ if true; then ls; fi

1
対話型のコマンドラインプロンプトを使用している場合、シェルの履歴をきれいにする以外に、これを行う必要がある特別な理由はありますか?機能的には、余分な改行はシェルに影響を与えません。長い複雑なシェルスニペットを入力する場合は、エディターを使用するのが最善です。fcコマンドも確認してください。ほとんどすべてのシェルで使用できます。
jw013 2013年

きれいではなく、単に複雑なコマンドを読みやすくするためです。
nr 2013年

回答:


4

改行文字は、Control-J別名LF(ラインフィード)、です。Ctrl+ を押すと、キーと同じようにJコマンドが実行さaccept-lineReturnます。リテラルLF文字を挿入するには、Ctrl+ V Ctrl+を押しJます。コマンドCtrl+ Vquoted-insert)は、文字通り次の文字を挿入します。したがって、行を分割するには、\ Ctrl+ を入力できます V

これを頻繁に行う場合は、マクロにすることができます。

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'

6

あなたは使用することができedit-and-execute-command、通常にマッピングされ、Ctrl+ x+ eする、エディタで現在のコマンドを開きます。エディターを終了すると、コマンドが実行されます。


1
ニース-これを知らなかった。$ EDITOR環境変数が何かに設定されていることを確認する必要があります-私vimは私のように追加しました:export EDITOR=vim
slm

1
エディターの終了時にコマンドの実行をキャンセルするにはどうすればよいですか?私が使用し:q!たりZQが、無駄の。
Birei 2013

1
@Birei:すべての行を削除してから、保存して終了します(例:ggdG:wqまたは:%d|wqなど)。コマンドは履歴に残ります(以前のエントリから呼び出した場合は重複する可能性があります)が、実行されません。
追って通知があるまで一時停止。

@DennisWilliamson:すごい!! ほぼ3年後、私はまだこの問題を解決していませんでした。ソリューションが非常にシンプルであり、シンプルさが常に優れているため、多くの感謝を述べています。
Birei

2

注-viおよびvimに固有のこの回答

set -o vi    # edit commands using vi
VISUAL=/usr/bin/vim

編集するには、現在の型付き行、ヒットESC(に入るためにviまたはvimコマンドモード)、その後、入力しますvvi

すべてのvi / vim編集コマンドが機能することに注意してください。例えば

  • ESC+ A は現在入力されている行の終わりに置きます。
  • ESC+ 0 カーソルを行の先頭に置きます。

優秀な。これにより、コマンドラインの編集がはるかに簡単になります。しかし、ビジュアルモードに入らずに改行文字を挿入する方法を知っていますか?
nr

2
ありがとう。CTRL+ v次にCTRL+ jを押して改行をスローする必要があります。
容疑者2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.