Bagaimana agar vim bekerja dengan tmux dengan benar?

19

Saya mencoba mencari cara untuk mendapatkan vimdan tmuxbermain bersama.

Masalah saya adalah: Ketika saya menggunakan xterm-256colorsaya mulai vimbekerja dengan baik, tetapi latar belakang tidak membuat dengan benar.

Saya memperbaikinya dengan menggunakan screen-256color. Ini terlihat bagus tetapi istirahat Ctrl + arrow keys(mereka masuk dalam mode insert dan menghapus 4 baris). Saya ingin menggunakan pemetaan ini sebagai gantinya untuk beralih tab vim.

Bagaimana saya membuatnya bekerja?

mengakali
sumber

Jawaban:

8

Jalankan di catdalam tmuxdan tekan tombol yang dimaksud untuk mengetahui kode melarikan diri yang mereka hasilkan. Bagi saya ini memberi ^[[Ddan ^[[C. Kemudian hanya memetakan kode melarikan diri secara langsung.

nnoremap ^[[D gT
nnoremap ^[[C gt

di mana itu ^[adalah karakter pelarian, yang dapat Anda sisipkan dengan menekan <CTRL-v><ESC>vim.

Mika Fischer
sumber
Itu tidak mengubah perilaku vim saya.
mengakali
Apa yang tercetak saat Anda memulai cat dalam tmux dan menekan tombol?
Mika Fischer
^ [[1; 5C dan ^ [[1; 5D. Ide bagus, saya tidak tahu bagaimana mendapatkannya. Baru saja mencobanya. Berhasil! Terima kasih.
mengakali
Bagus. Saya mengedit jawaban saya untuk memasukkan metode untuk mendapatkan kode pelarian yang tepat.
Mika Fischer
22

Ada beberapa level konfigurasi yang perlu diatur dengan benar untuk fungsionalitas terbaik.

  1. Konfigurasikan tmux untuk mengenali urutan. Sebelum meluncurkan tmux , tetapkan nilai TERM yang sesuai untuk emulator terminal Anda (mis xterm-256color.). Masuknya Database terminfo diidentifikasi oleh variabel lingkungan TERM memberitahu tmux bagaimana mengenali urutan untuk dimodifikasi tombol panah (kemampuan yang ditetapkan pengguna { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Konfigurasikan tmux untuk menghasilkan urutan. Atur xterm-keysopsi sesi onsehingga tmux akan menghasilkan urutan gaya xterm sendiri ketika menerima urutan yang diidentifikasi oleh TERM. Di Anda ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Konfigurasikan program yang berjalan di dalam tmux untuk menggunakan / mengharapkan sebagian besar urutannya. Pastikan Anda menggunakan screenTERM di dalam tmux (mis screen-256color.). Ini memberitahu program-program yang berjalan di dalam tmux bagaimana mengontrol emulasi terminal (kembali) tmux dan respons apa yang harus mereka harapkan dari tmux .
  4. Sayangnya, screenentri basis data berbasisinfo sering tidak menentukan urutan apa pun untuk tombol panah yang dimodifikasi (yaitu mereka mungkin tidak memiliki kUP, dan lain-lain), sehingga program yang berjalan di dalam tmux mungkin tidak tahu untuk mengharapkan urutan seperti itu. Anda harus mengkonfigurasi secara manual semua program yang ingin Anda kenali kunci-kunci ini. Di Vim , Anda bisa memasukkan ini ke ~/.vimrc:

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys is on
        execute "set <xUp>=\e[1;*A"
        execute "set <xDown>=\e[1;*B"
        execute "set <xRight>=\e[1;*C"
        execute "set <xLeft>=\e[1;*D"
    endif
    

    Anda mungkin ingin menggunakan varian tanpa x(yaitu <Up>bukannya <xUp>, dan lain-lain) jika Anda menemukan bahwa menggunakan x-variant menyebabkan tombol panah normal berhenti bekerja.

    Keuntungan dari mendefinisikan tombol-tombol seperti ini adalah Anda tidak harus memetakan setiap kombinasi pengubah secara terpisah (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); yang *mendapat interpretasi khusus untuk menangani semua urutan terkait (lihat :help xterm-modifier-keys).

  5. Kemudian Anda dapat memetakan kunci alih-alih urutan yang dikodekan keras:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    
Chris Johnsen
sumber
1
Hei, ini bekerja dengan sempurna!
Pablo Olmos de Aguilera C.
2

Seperti yang dijelaskan di sini , nonaktifkan Background Color Erase (BCE) dengan menghapus t_utopsi terminal (jalankan :set t_ut=di Vim dan kemudian tekan Control+ Luntuk menyegarkan tampilan terminal) sehingga skema warna berfungsi dengan baik ketika Vim digunakan di dalam tmux dan layar GNU.

Dengan cara ini, Anda dapat mempertahankan TERMnilai Anda xterm-256coloruntuk deteksi kunci yang tepat sambil mendapatkan rendering skema warna Vim yang tepat juga! :-)

sunaku
sumber
1

Apakah pengaturan set t_Co=256di ~ / .vimrc Anda membantu sama sekali? Ini hanya pengaturan warna tetapi dapat membantu mengatasi beberapa masalah.

Anda dapat memetakan kembali ctrl+Arrowkunci di ~ / .vimrc Anda juga ...

Sunting: apakah Anda mencoba ctrl+Arrowdalam sesi layar GNU? Saya pikir ini mungkin masalah Anda.

Sardathrion - Pasang kembali Monica
sumber
terlihat dan berfungsi dengan baik di layar dengan xterm-256color
mengakali
set t_Co = 256 dilakukan juga
mengakali
Apakah ada yang membantu?
Sardathrion
Sayangnya tidak ada. Apa maksud Anda dengan remapign ctrl + panah? Saya menggunakannya sudah memetakan kembali untuk beralih tab di vim.
mengakali
dipetakan seperti ini: map <C-Right> gt
outsmartin