Làm thế nào để có được vim để làm việc với tmux đúng cách?


19

Tôi đang cố gắng tìm ra cách để chơi vimtmuxchơi cùng nhau.

Vấn đề của tôi là: Khi tôi sử dụng, xterm-256colortôi có vimthể làm việc tốt, nhưng nền không hiển thị đúng.

Tôi đã sửa lỗi này bằng cách sử dụng screen-256color. Điều này có vẻ tốt nhưng phá vỡ Ctrl + arrow keys(họ đi trong chế độ chèn và xóa 4 dòng). Tôi muốn sử dụng các ánh xạ này để thay đổi các tab vim.

Làm thế nào để tôi có được điều này để làm việc?

Câu trả lời:


8

Chạy catbên trong tmuxvà nhấn các phím trong câu hỏi để tìm ra mã thoát mà họ tạo ra. Đối với tôi điều này cho ^[[D^[[C. Sau đó, chỉ cần ánh xạ các mã thoát trực tiếp.

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

trong đó ^[là một ký tự thoát, mà bạn có thể chèn bằng cách nhấn <CTRL-v><ESC>vào vim.


Điều đó đã không thay đổi hành vi của vim của tôi.
outsmartin

Những gì được in khi bạn bắt đầu con mèo trong tmux và nhấn các phím?
Mika Fischer

^ [[1; 5C và ^ [[1; 5D. Ý kiến ​​hay, tôi không biết làm thế nào để có được những thứ đó. Chỉ cần thử nó. Nó hoạt động! Cảm ơn bạn.
outsmartin

Tuyệt quá. Tôi đã chỉnh sửa ansewer của mình để kết hợp phương pháp để có được mã thoát đúng.
Mika Fischer

22

Có một số mức cấu hình cần được thiết lập chính xác để có chức năng tốt nhất.

  1. Cấu hình tmux để nhận ra các chuỗi. Trước khi khởi chạy tmux , hãy đặt giá trị TATE phù hợp với trình giả lập thiết bị đầu cuối của bạn (ví dụ xterm-256color). Sự xâm nhập cơ sở dữ liệu terminfo xác định bởi các biến môi trường TERM nói tmux làm thế nào để nhận ra các chuỗi cho sửa đổi các phím mũi tên (người dùng xác định khả năng { kUP, kDN, kRIT, kLFT} {, 3.. 7}).
  2. Cấu hình tmux để tạo các chuỗi. Đặt xterm-keystùy chọn phiên thành onđể tmux sẽ tạo chuỗi kiểu xterm của chính nó khi nó nhận được một chuỗi mà TERM của nó xác định. Trong của bạn ~/.tmux.conf:

    set-option -g xterm-keys on
    
  3. Định cấu hình các chương trình chạy bên trong tmux để sử dụng / mong đợi phần lớn các chuỗi của nó. Hãy chắc chắn rằng bạn đang sử dụng screenTATE dựa trên cơ sở bên trong tmux (ví dụ screen-256color). Điều này cho các chương trình chạy bên trong tmux cách kiểm soát mô phỏng (tái) thiết bị đầu cuối của tmux và những phản hồi mà họ nên mong đợi từ tmux .
  4. Thật không may, screencác mục cơ sở dữ liệu terminfo dựa trên cơ sở thường không xác định bất kỳ chuỗi nào cho các phím mũi tên đã sửa đổi (nghĩa là chúng có thể không có kUP, et cetera), vì vậy các chương trình chạy bên trong tmux có thể không biết để mong đợi các chuỗi đó. Bạn sẽ cần phải cấu hình thủ công bất kỳ chương trình nào bạn muốn nhận ra các phím này. Trong Vim , bạn có thể đặt cái này vào ~/.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
    

    Bạn có thể muốn sử dụng các biến thể mà không có x(tức là <Up>thay vì <xUp>et cetera) nếu bạn thấy rằng việc sử dụng x-variant khiến các phím mũi tên bình thường của bạn ngừng hoạt động.

    Ưu điểm của việc xác định các khóa như thế này là bạn không phải ánh xạ riêng từng tổ hợp sửa đổi (Shift, Control, Contol + Shift, Meta, Meta + Shift, Meta + Control, Meta + Control + Shift); việc *giải thích đặc biệt để xử lý tất cả các chuỗi liên quan (xem :help xterm-modifier-keys).

  5. Sau đó, bạn có thể ánh xạ các khóa thay vì các chuỗi được mã hóa cứng của chúng:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    

1
Này, cái này hoạt động hoàn hảo!
Pablo Olmos de Aguilera C.

2

Như đã giải thích ở đây , hãy tắt Xóa nền màu (BCE) bằng cách xóa t_uttùy chọn đầu cuối (chạy :set t_ut=trong Vim và sau đó nhấn Control+ Lđể làm mới màn hình của thiết bị đầu cuối) để các lược đồ màu hoạt động chính xác khi Vim được sử dụng bên trong màn hình tmux và GNU.

Bằng cách này, bạn có thể giữ TERMgiá trị của mình xterm-256colorđể phát hiện khóa thích hợp đồng thời cũng nhận được kết xuất sơ đồ màu Vim phù hợp! :-)


1

Có thiết lập set t_Co=256trong ~ / .vimrc của bạn không? Đây chỉ là một cài đặt màu nhưng có thể giúp xóa một số vấn đề.

Bạn cũng có thể ánh xạ lại các ctrl+Arrowkhóa trong ~ / .vimrc của mình ...

Chỉnh sửa: bạn đã thử ctrl+Arrowtrong một phiên màn hình GNU? Tôi nghĩ rằng đây có thể là vấn đề của bạn.


nó trông và hoạt động tốt trên màn hình với xterm-256color
outsmartin

thiết lập t_Co = 256 được thực hiện tốt
outsmartin

Có ai giúp nó không?
Sardathrion - Phục hồi Monica

tiếc là không có. Bạn có ý nghĩa chính xác với việc sắp xếp lại ctrl + mũi tên? Tôi sử dụng chúng đã được ánh xạ lại để chuyển đổi các tab trong vim.
outsmartin

nó được ánh xạ như thế này: map <C-Right> gt
outsmartin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.