GNU/Linux >> Belajar Linux >  >> Linux

Tombol Beranda/Akhiri tidak berfungsi di tmux

Di tmux 2.0, Anda cukup menambahkan 2 baris ini di .tmux.conf Anda :

bind -n End send-key C-e
bind -n Home send-key C-a

Tampaknya masalah utamanya adalah dengan menggunakan xterm-256color untuk $TERM. Saya mengganti $TERM ke screen-256color dan masalahnya hilang.


Jika Anda ingin tetap menggunakan xterm-256color di tmux karena alasan tertentu - gunakan solusi arch dengan inputrc. Saya mengujinya di tmux dengan rxvt, ruby ​​irb, python, lua dan tombol home/end ok. Mungkin setiap aplikasi readline akan baik-baik saja.

Dari arch wiki:

Hal pertama yang pertama:

jangan menyetel $TERM secara manual - biarkan terminal yang melakukannya.

Banyak aplikasi baris perintah menggunakan pustaka Readline untuk membaca masukan. Jadi, mengonfigurasi Readline dengan benar dapat memperbaiki Home dan End dalam banyak kasus.

file default /etc/inputrc tidak menyertakan pemetaan untuk kunci home/end.

Untuk memeriksa urutan escape yang dipancarkan untuk kunci ini adalah:

1. Ctrl + V
2. Home
3. Spacebar
4. Ctrl + V
5. End

ini mungkin akan mencetak:$ ^[[1~ ^[[4~ . Jadi, Anda harus menambahkan pemetaan untuk urutan ini ke inputrc Anda (/etc/inputrc menjadi global, atau hanya untuk pengguna Anda ~/.inputrc):

"\e[1~": beginning-of-line
"\e[4~": end-of-line

Tambahkan yang berikut ke .tmux.conf Anda :

bind-key -n Home send Escape "OH"
bind-key -n End send Escape "OF"

Dan selesai!

Penjelasan

Setelah mencoba masing-masing dari ini, dan beberapa lainnya yang saya lihat sambil membaca dengan teliti jawaban dan dokumentasi lain, ini akhirnya berhasil untuk saya dalam setiap skenario yang saya lemparkan. Saya tidak dapat menjanjikan hal yang sama untuk Anda, karena skenario setiap orang berbeda, tetapi inilah yang akhirnya saya dapatkan.

Ini ditemukan setelah memperkenalkan percobaan/kesalahan dan logika yang sama dari artikel yang agak relevan yang tidak lagi tersedia. Kuncinya adalah di mana terjemahan terjadi; dalam kasus saya, ini terjadi dalam .tmux.conf saya , bukan .bashrc atau .zshrc (terutama karena rumah/akhir saya berfungsi dengan baik di luar tmux )

Men-debug

Anda dapat men-debug masalah ini dengan menggunakan cat -v .

Jalankan cat -v , lalu tekan tombol Beranda dan Selesai kunci. Keluar menggunakan Ctrl +C .

$ cat -v

Inilah tampilan output saya di dalam tmux using zsh , zsh , dan bash :

tmux

➜  ~ cat -v
^[[1~^[[4~^C

zsh

➜  ~ cat -v
^[[H^[[F

pesta

bash-3.2$ cat -v
^[[H^[[F

Solusi

Bandingkan contoh di atas dengan yang diharapkan, dengan memasangkan tput dengan cat -v :

$ tput khome | cat -v; echo
^[OH
$ tput kend | cat -v; echo
^[OF

Kesimpulan

Karena masalah ini hanya ada di dalam tmux , dan bukan di dalam cangkangnya sendiri, saya memilih untuk membuat perubahan pengikatan dalam konfigurasi tmux sebagai gantinya. Dengan menggunakan bind-key dipasangkan dengan send , kita bisa menggunakan Escape kata kunci dipasangkan dengan urutan yang kita inginkan untuk mencapai terjemahan kita. Jadi:

bind-key -n NAME_OF_KEY send Escape SEQUENCE_GOES_HERE

Proses debug dan pemecahan ini dapat diterapkan pada masalah terjemahan penting lainnya. Tapi, jangan terlalu gila. Beberapa kunci dipetakan ke urutan pelarian tertentu karena suatu alasan. Perhatikan bagaimana bash dan zsh menerima ^[[H urutan untuk Beranda bukannya ^[OH; mungkin tidak disarankan untuk mengganti ini di .zshrc kita kecuali kami mengalami masalah besar dengan ini di zsh .


Linux
  1. Linux Setuid Tidak Berfungsi?

  2. Tmux Tidak Sumber .tmux.conf?

  3. Linux – Mengapa Setuid Tidak Bekerja??

  1. Vim Tidak Berjalan Di Dalam Tmux?

  2. Mengapa `keluar &` Tidak Berfungsi?

  3. gpg:perintah tidak ditemukan

  1. Bagaimana cara kerja cat << EOF di bash?

  2. libevent tidak menemukan kesalahan di tmux

  3. ssh-copy-id tidak berfungsi