Saya baru-baru mulai menggunakan tmux (adalah pengguna layar sebelumnya) dan saya menyukainya, kecuali untuk satu masalah kecil. Saya menggunakan emacs dalam sesi tmux saya dan saya terbiasa menggunakan tombol Shift-panah untuk berpindah di antara windows emacs (bukan windows tmux). Ketika menjalankan dalam tmux, binding ini tampaknya berhenti bekerja sepenuhnya (seperti mereka tidak mendaftar ke emacs sama sekali). Jika saya keluar dari tmux dan menjalankan emacs di shell saya, mereka bekerja dengan baik.
Saya menggunakan iTerm2, ssh'd ke dalam kotak Linux, menjalankan tmux / emacs di sana. Saya memiliki binding kunci panah-diatur sebagai berikut di .emacs saya:
(global-set-key "\M-[1;2A" 'windmove-up)
(global-set-key "\M-[1;2B" 'windmove-down)
(global-set-key "\M-[1;2C" 'windmove-right)
(global-set-key "\M-[1;2D" 'windmove-left)
Ketika tidak berjalan di tmux, saya dapat mengonfirmasi bahwa itu adalah urutan karakter yang tepat untuk kombinasi tombol shift-panah dengan melakukan Cq di emacs dan kemudian menekan urutan tombol. Di dalam tmux, bahkan itu tidak berfungsi karena sepertinya tidak melihat input dari penekanan tombol shift-panah (itu hanya duduk di prompt Cq).
Melihat binding kunci untuk tmux, saya tidak berpikir ada yang terikat dengan tombol Shift-panah dan bahkan jika itu, mereka hanya akan mendaftar setelah memasukkan awalan (yang terikat ke Co dalam kasus saya).
Adakah ide tentang cara membuat tombol shift-panah berfungsi kembali dalam tmux?
Jawaban:
Pertama, pastikan TERM Anda benar di setiap lokasi:
xterm
-sesuatu (misalnyaxterm-256color
) di dalam shell lokal Anda berjalan di jendela iTerm2 Andaxterm
-sesuatu di dalam shell Anda setelah SSHing ke sistem LinuxIni harus sama dengan apa pun yang Anda gunakan secara lokal di iTerm2 , karena SSH harus meneruskannya ke sisi remote (dan, yang penting, sisi remote tidak boleh secara membabi buta menimpa nilai dalam file inisialisasi shell).
screen
-sesuatu (misalnyascreen-256color
) di dalam shell Anda berjalan di bawah tmux pada sistem LinuxAnda harus selalu menggunakan
screen
TERM di dalam tmux .Memiliki
xterm
TERM segera di luar tmux akan memungkinkan tmux mengenali tombol panah yang dimodifikasi, tetapi itu tidak akan melewatinya kecuali Anda jugaxterm-keys
mengaktifkan opsi jendelanya. Masukkan ini di~/.tmux.conf
sistem Linux Anda:Urutan untuk tombol yang bergeser sekarang harus melalui Emacs , berjalan di dalam tmux , melintasi koneksi SSH, di dalam jendela iTerm2 .
sumber
export XTERM=xterm-256color
(Saya menulis ini karena saya tidak tahu apa artinya "JANGKA ANDA" dalam jawaban, saya mencari komentar yang menjelaskan bahwa ... tidak ada, dan sekarang ada.)Pertama, Anda harus mengaktifkan
xterm-keys
konfigurasi tmux Anda. Jadi masukkan berikut ini~/.tmux.conf
Tapi, ini akan memecah kombinasi kunci lainnya. Untuk memperbaikinya, masukkan berikut ini di
~/.emacs
atau~/.emacs.d/init.el
konfigurasi AndaSaya juga punya solusi di archlinux wiki
sumber
tmux FAQ digunakan untuk memuat entri berikut :
Saya membuka masalah tmux # 1349 untuk meminta pengembalian untuk entri FAQ.
sumber
Secara umum, masalah seperti ini terjadi karena ketidakcocokan antara apa yang dikirim terminal emulator dan apa yang diharapkan oleh aplikasi klien.
Emulator terminal yang berbeda memiliki tingkat kemampuan penyesuaian yang berbeda, jadi membiasakan diri dengan tunable emulasi dari yang khusus diperlukan.
Aplikasi klien bergantung pada nilai
$TERM
yang digunakan untuk mencari kemampuan terminal (emulator) dalamterminfo
(atautermcap
) basis data.Dalam kasus Anda, binding emacs Anda menggunakan urutan eksplisit sehingga
$TERM
dan terminfo tidak relevan: emulator terminal spesifik diharapkan - seperti yang sudah Andaxterm
ketahui , yang kompatibel satu.sumber