Làm cách nào để có shift + mũi tên và ctrl + mũi tên làm việc trong Vim trong tmux?


44

Đây là tất cả trong iTerm2 trên OS X.

tôi từng có

export TERM='xterm-256color'

trong tôi .bashrc. Điều này có nghĩa là Vim trong tmux đã sử dụng 256 màu.

Và một khi tôi đã thêm

set -g xterm-keys on

sau đó các phím tắt với bộ sửa đổi hoạt động tốt trong Vim. Cụ thể: shift+left/righttôi đã ánh xạ để chuyển các tab Vim, ctrl+up/downmà tôi đã ánh xạ để di chuyển các dòng ("bong bóng") và shift+left/righthoạt động ra khỏi hộp để nhảy từng chữ trong chế độ dòng lệnh (ví dụ: khi gõ một cái gì đó như :e foo bar baz).

Tuy nhiên, thiết lập này có vấn đề là màu nền Vim chỉ hiển thị phía sau văn bản, như được đề cập ở đây .

Vì vậy, tôi đã loại bỏ

export TERM='xterm-256color'

từ của tôi .bashrcvà thay vào đó đặt điều này trong .tmux.conf:

set -g default-terminal "screen-256color"

Điều đó đã cố định màu nền Vim, nhưng đã phá vỡ các phím tắt - thay vào đó chúng làm những việc không mong muốn (di chuyển con trỏ, xóa văn bản).

Bằng cách sử dụng ctrl+vđể chèn đầu ra nguyên văn từ các tổ hợp phím (như được mô tả ở đây ), tôi có thể làm việc xung quanh nó:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

Điều này làm cho các phím tắt hoạt động, nhưng nó không cảm thấy như một giải pháp đúng. Bất cứ ai có thể cho tôi biết những gì đang xảy ra ở đây và làm thế nào để khắc phục nó?

Câu trả lời:


68

Bạn cần đặt tùy chọn cửa sổ tmuxxterm-keys để tmux sẽ chuyển các khóa này qua các đầu cuối của nó. Bạn có thể muốn đặt điều này trong ~/.tmux.conf:

set-window-option -g xterm-keys on

Vim thường sẽ tự động thiết lập việc xử lý các phím này khi TERM là một xtermcái gì đó, nhưng nó bỏ qua điều này vì TERM screen-256color. Bạn có thể tự cấu hình các phím này theo cách ~/.vimrcnhư sau:

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option 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

Ít nhất theo cách đó bạn không phải lập bản đồ tất cả các kết hợp khác nhau.


Cảm ơn bạn! Điều đó có vẻ tốt hơn những gì tôi đã có, và tôi đánh giá cao lời giải thích. Một điều được khắc phục bằng những gì tôi có, nhưng không phải bởi các dòng của bạn, đó là mũi tên lên / xuống không hoạt động trong plugin Command-T như được mô tả ở đây: superuser.com/questions/237751/. Tôi vừa thêm map <Esc>[B <Down>từ một của các câu trả lời. Có vẻ như lý do có một số giả định xấu được thực hiện bởi chính plugin.
Henrik N

Rõ ràng, giải pháp của bạn cộng với map <Esc>[B <Down>chủ đề khác có nghĩa là mọi thứ đều hoạt động tốt.
Henrik N

@HenrikN Bạn có thể vui lòng làm rõ những gì map <Esc>[B <Down>không? Tôi không thấy bất kỳ sự khác biệt nào bằng cách thêm nó vào tệp .vimrc của mình.
Francesco Boccardo

@Francesco Boccardo: Nếu bạn theo liên kết trong nhận xét trước của tôi và sau đó theo liên kết một lần nữa từ đó, bạn có thể truy cập superuser.com/a/215181 để giải thích chi tiết này :)
Henrik N

@HenrikN Cảm ơn. Vì vậy, đây có thể là một vấn đề liên quan đến OSX hoặc có thể nó đã được giải quyết trong 7 năm này, bởi vì nhấn lệnh (control?) + R không làm rối các phím mũi tên trong vim in tmux cho tôi (tôi đang dùng Linux).
Francesco Boccardo

8

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
Đẹp! Công việc thám tử tuyệt vời.
Henrik N

2
Đây là những gì tôi đã thay đổi chính xác: github.com/henrik/dotfiles/commit/ Màu sắc và các phím bổ trợ dường như hoạt động tốt cả bên ngoài và bên trong tmux.
Henrik N
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.