Bagaimana cara mengedit baris sebelumnya dalam perintah beberapa baris di Bash?

24

Saat memasukkan perintah yang mencakup beberapa baris di Bash, bagaimana cara mengedit baris sebelumnya? Saya pengguna Linux Mint (Lisa) menggunakan Terminal GNOME.

Sebagai contoh, katakanlah saya mengetik:

$ echo "foo bar
> baz
>

Dan kemudian ketika saya akan mengetik baris ketiga dari perintah, tiba-tiba menyadari saya ingin "foo" dan "bar" berada di baris yang terpisah. Bagaimana saya mengubah posisi kursor antara "foo" dan "bar" sehingga saya bisa menekan enter dan meletakkannya di baris yang berbeda?

(Ini tidak mudah seperti yang Anda kira. Panah atas tidak berfungsi, begitu juga Ctrl-P. Jadi tolong, coba sebelum memposting! Terima kasih!)

Asher Walther
sumber
Jawaban yang diterima mengatakan tidak ada solusi, tetapi ada. Lihat di bawah
cdosborn

Jawaban:

16

Sayangnya, itu terserah bash, bukan ke terminal. Pilihan Anda adalah:

  1. Gunakan titik koma alih-alih baris baru, meskipun meskipun demikian Anda tidak dapat naik satu baris layar pada satu waktu tetapi harus menggunakan perintah karakter atau gerakan kata. (Anehnya, zshsetidaknya memungkinkan Anda bergerak dalam perintah majemuk saat mengedit riwayat, tidak hanya dalam perintah saat ini .) Kadang-kadang fc(yang melemparkan Anda ke editor Anda dengan perintah sebelumnya) adalah cara termudah untuk menangani perintah majemuk.

  2. Jika Anda menggunakan Bash, gunakan kombinasi tombol berikut:

    ctrl x e

    Ini akan membuka perintah yang sedang Anda kerjakan menggunakan editor teks Anda. Simpan file dan keluar. (Saya menemukan perintah pada presentasi Shell Hater .) Pengguna Zsh memiliki alternatif ini .

geekosaurus
sumber
1
Halaman bash man menjelaskan cara mengubah editor mana yang digunakan: edit-dan-jalankan-perintah (C-xC-e) - Meminta editor pada baris perintah saat ini, dan menjalankan hasilnya sebagai perintah shell. Bash mencoba memanggil $ VISUAL, $ EDITOR, dan emacs sebagai editor, dalam urutan itu.
Matius
Ada solusinya, tanpa membuka editor.
cdosborn
Secara teknis ini bukan untuk bash - tetapi ke perpustakaan "readline" yang digunakan bash untuk mendapatkan input.
Christian Herenz
11

Solusinya adalah jangan pernah memasukkan perintah sampai multi-line benar, cukup ketik: CtrlvCtrlj ketika Anda ingin pergi ke baris berikutnya. Metabuntuk kembali kata.

larutan

kredit untuk jawaban @ rici

cdosborn
sumber
4

Lucunya, Ctrl+Citulah yang Anda cari.

ketika Anda aktif

$ echo "foo bar
> baz
>

cukup tekan Ctrl+C(baris perintah yang diedit akan ditangguhkan) dan tekan Up(riwayat sebelumnya). Permintaan Anda akan: (perhatikan tidak adanya>)

$ echo "foo bar
baz

Sekarang Anda dapat bergerak dengan Left Rightbahkan melalui lompatan garis.

Hanya ada satu kekhasan, Anda harus berada pada karakter terakhir untuk menambahkan baris lain, jadi bergeraklah untuk mengedit baris yang ada (mulai dengan Ctrl+A) pers Enter jika itu cukup atau akhir goto ( Ctrl+E) untuk menambahkan lebih banyak baris Enter. Kelemahan lainnya adalah Ctrl+_(undo) hanya mengembalikan perubahan dari yang terakhirCtrl+C

Albfan
sumber
-2

Salin perintah dan tempel di notepad lalu format dari sana. Setelah itu Anda dapat menyalin perintah Anda kembali ke terminal.

Pacheko
sumber