Alt-Kiri untuk melewati kata-kata tidak berfungsi di emulator terminal

16

Pada mesin Debian Wheezy di pekerjaan sebelumnya, saya terbiasa dengan Alt + Kiri dan Alt + Kanan untuk melompati kata-kata di baris perintah aktif (dalam bash).

Namun, karena di rumah saya telah meningkatkan ke Jessie (Debian 8.0, cabang pengujian) ini tidak berfungsi lagi: alih-alih melewatkan kata sebelumnya, Alt-Left mencetak sesuatu seperti Datau [D. OTOH, jika saya membuka ssh dan terhubung ke Debian Wheezy tanpa kepala saya, itu berfungsi dengan baik.

Selain itu, saya baru saja menginstal Fedora 20 di pekerjaan baru saya dan di sini perilakunya sama. Ini berlaku untuk bash, csh dan ksh (dimulai di bawah env -i), serta rxvt-unicode dan xfce4-terminal, jadi pasti ada sesuatu di luar level ini.

Di mana lagi dalam tumpukan saya harus mencari perbedaannya?

Alois Mahdal
sumber
4
Saya akan menyarankan mencoba alt-b dan alt-f (serta sisa tombol readline), karena mereka lebih universal, dan cukup banyak program baris perintah yang menghormati binding readline.
sopan

Jawaban:

21

Anda mungkin memiliki file lokal ~/.inputrcatau global yang /etc/inputrcdidefinisikan yang hilang pada peningkatan. Cara mudah memperbaikinya adalah membuat ~/.inputrcfile dengan baris berikut:

## enable Alt-arrows 
"\e[1;3D": backward-word ### Alt left
"\e[1;3C": forward-word ### Alt right

Mereka akan bekerja dengan xtermdan terminatordan gnome-terminaltetapi mungkin perlu disesuaikan untuk terminal lain. Sayangnya, setiap terminal emulator dapat menggunakan sintaks yang berbeda. Untuk detail lebih lanjut, lihat jawaban saya di sini .

terdon
sumber
Saya benar-benar bermaksud Alt, dan itu masih berfungsi pada mesin remote. Ctrl + Kiri / Kanan sudah diambil dalam Rxvt untuk memindahkan tab ke kiri dan ke kanan (Shift + Kiri / Kanan beralih tab dan Shift + Bawah membuka yang baru).
Alois Mahdal
1
By the way sementara Ctrl + Kiri / Kanan adalah umum di editor GUI, terminal adalah dunia yang sama sekali berbeda di mana saya belum melihat kombinasi itu.
Alois Mahdal
10

terdon mengatur saya ke arah yang benar: file inputrc .

Penyebabnya adalah bahwa secara non-intuitif, readline6 sebenarnya menggunakan ~ / .inputrc sebagai ganti / etc / inputrc, yang mana readline (3) tidak menekankan atau membantah:

Nama file ini diambil dari nilai variabel lingkungan INPUTRC. Jika variabel itu tidak disetel, standarnya adalah ~ / .inputrc. Jika file itu tidak ada atau tidak dapat dibaca, default utamanya adalah / etc / inputrc.

Jadi sementara di pada kedua mesin Debian / etc / inputrc identik dengan yang disediakan oleh libreadline6 paket (versi adalah sama juga), pada mesin yang lebih baru ~ / .inputrc ada dengan garis tunggal: set bell-style none. Ketika file ini dihapus, semua berfungsi dengan baik (lihat catatan di bawah).

Saya tidak bisa memeriksa Fedora sampai besok, tapi saya kira itu masalah yang sama. Pembaruan: Pada Fedora, ~ / .inputrc tidak ada, di sini / etc / inputrc sangat berbeda sehingga mungkin tidak mendefinisikan ini. Sebagai perbaikan terbaru, saya hanya menyimpan inputrc Debian sebagai ~ / .inputrc saya.


Catatan:

Misteri bagaimana hal itu bisa berubah selama 7> 8 upgrade masih belum terselesaikan, tetapi sebagian dapat dipertanggungjawabkan ke memori buruk saya dan beberapa juggling dotfile yang tidak disengaja. (BTW itu bukan upgrade APT tapi instal ulang dan manual dotfile bergerak jadi mungkin ~ .inputrc menghalangi entah bagaimana.)

Juga, Ketika saya mengatakan OK, maksud saya ia bekerja dengan Ctrl di mana-mana kecuali Rxvt (OK, saya hanya memeriksa xfce4-terminal tetapi kita tahu Rxvt adalah pemberontak yang biasa), di mana ini dipetakan kembali ke Alt, tampaknya karena Ctrl diambil oleh Rxvt -Fungsi spesifik - memindahkan tab aktif dalam daftar.

Seperti yang disebutkan dalam manual, dengan bash Anda dapat menggunakan perintah bind bawaan untuk menyelidiki apa yang saat ini Anda miliki.

Alois Mahdal
sumber
Tangkapan yang bagus, +1. Sebenarnya, ini lebih intuitif daripada yang Anda pikirkan. Perilaku default adalah untuk dotfiles khusus pengguna harus diutamakan daripada default seluruh sistem. Jika tidak, pengguna tidak akan dapat mengubah pengaturan mereka.
terdon
Lihat jawaban yang diperbarui untuk cara mengaktifkan Alt + panah secara khusus.
terdon
2
Ini normal, Anda perlu $include /etc/inputrcdi bagian atas ~/.inputrcjika Anda ingin membacanya juga.
Chris Down
@terdon masuk akal untuk lebih memilih pengaturan pengguna sebelum seluruh sistem, tapi apa yang saya lihat lebih intuitif adalah ~ / .initrc akan "digabungkan" ke / etc / initrc (yaitu / etc / initrc akan menjadi $included secara default).
Alois Mahdal
1
Lihat: 1. opsi hard-coded, 2. / etc / initrc, 3. ~ / .initrc --vs-- 1. opsi hard-coded 2. / etc / initrc OR ~ / .initrc. Cara pertama jauh lebih fleksibel karena dapat dengan mudah diperluas ke level yang lebih rendah (misalnya per proyek, saya akui contoh ini tidak terlalu masuk akal dengan readline tetapi Anda mengerti maksudnya).
Alois Mahdal