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!)


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 .


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


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


-2

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.