Membagi baris perintah prompt yang ada menjadi beberapa baris

8

Saya mengerti saya bisa mengetik \ enterdi akhir bashbaris perintah untuk melanjutkan perintah di baris lain. Tapi bagaimana saya bisa membagi baris perintah cepat - yang sudah diketik sepenuhnya - menjadi dua?

Sebagai contoh, bagaimana saya bisa mematahkan garis ini sebelum thentanpa harus memotong sisanya dan mengetiknya lagi?

$ if true; then ls; fi
no
sumber
1
Jika Anda berada pada prompt perintah interaktif, apakah ada alasan khusus yang perlu Anda lakukan selain membuat riwayat shell Anda terlihat lebih cantik? Secara fungsional, baris baru tambahan tidak membuat perbedaan pada shell. Jika Anda mengetikkan snipet shell panjang yang kompleks, yang terbaik adalah menggunakan editor. Lihat ke dalam fcperintah juga - ini tersedia di hampir semua shell.
jw013
Bukan lebih cantik tetapi hanya untuk membuat perintah yang kompleks dapat dibaca.
nr

Jawaban:

4

Sebuah baris baru karakter LF (line feed), alias Control-J. Jika Anda menekan Ctrl+ J, ini menjalankan perintah accept-line, sama seperti Returntombol. Untuk memasukkan karakter LF literal, tekan Ctrl+ V Ctrl+ J. Perintah Ctrl+ V( quoted-insert) menyisipkan karakter berikutnya secara harfiah. Dengan demikian, untuk memisahkan garis, Anda dapat memasukkan \ Ctrl+ V.

Jika Anda sering melakukannya, Anda bisa membuatnya menjadi makro:

bind '"\e\C-j": "\\\C-v\C-j\C-b\C-b"'
Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

Anda dapat menggunakan edit-and-execute-command, biasanya dipetakan ke Ctrl+ x+ e, untuk membuka perintah saat ini di editor . Saat keluar dari editor, perintah akan dijalankan.

l0b0
sumber
1
Bagus - tidak pernah tahu ini. Anda akan perlu memastikan variabel lingkungan EDITOR $ Anda diatur ke sesuatu - saya menambahkan vimke tambang seperti: export EDITOR=vim.
slm
1
Bagaimana saya bisa membatalkan eksekusi perintah saat keluar dari editor? Saya menggunakan :q!atau ZQtetapi tidak berhasil.
Birei
1
@Birei: Hapus semua baris lalu simpan dan keluar (misalnya ggdG:wqatau :%d|wq, dll.). Perintah akan tetap dalam sejarah (mungkin sebagai duplikat jika Anda memanggilnya dari entri sebelumnya), tetapi itu tidak akan dieksekusi.
Dijeda sampai pemberitahuan lebih lanjut.
@DennisWilliamson: Wow !! Hampir tiga tahun kemudian saya belum menyelesaikan masalah ini, terima kasih banyak karena solusinya sangat sederhana, dan kesederhanaan selalu lebih baik.
Birei
2

Catatan - jawaban ini khusus untuk vi dan vim

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

Untuk mengedit baris yang diketik saat ini, tekan ESC(untuk masuk ke viatau vimmode perintah), lalu ketik vatau vi.

Perhatikan semua perintah edit vi / vim berfungsi. misalnya

  • ESC+ A menempatkan ke akhir baris yang diketik saat ini.
  • ESC+ 0 menempatkan kursor di awal baris.
tersangka
sumber
Luar biasa. Ini jelas membuat pengeditan baris perintah menjadi lebih mudah. Tapi apakah Anda tahu cara memasukkan karakter baris baru tanpa masuk ke mode visual?
nr
2
Terima kasih. CTRL+ vlalu CTRL+ juntuk melempar baris baru seharusnya berfungsi.
tersangka