Môi trường:
- Fedora 25 (4.9.12-200.fc25.x86_64)
- Thiết bị đầu cuối Gnome 3.22.1 Sử dụng phiên bản VTE 0.46.1 + GNUTLS
- VIM - Vi IMproved 8.0 (2016 ngày 12 tháng 9, biên soạn ngày 22 tháng 2 năm 2017 16:26:11)
- tmux 2.2
Gần đây tôi đã bắt đầu sử dụng tmux và đã nhận thấy rằng màu sắc trong Vim thay đổi tùy thuộc vào việc tôi đang chạy bên trong hay bên ngoài tmux. Dưới đây là ảnh chụp màn hình của Vim bên ngoài (trái) và bên trong (phải) của tmux trong khi xem Git diff:
TERM
Biến của tôi là
- Bên ngoài tmux:
xterm-256color
- Bên trong tmux:
screen-256color
Vim báo cáo các loại thiết bị đầu cuối như mong đợi (thông qua :set term?
):
- Bên ngoài tmux:
term=xterm-256color
- Bên trong tmux:
term=screen-256color
Vim cũng báo cáo cả hai phiên bản đang chạy ở chế độ 256 màu (thông qua :set t_Co?
):
- Bên ngoài tmux:
t_Co=256
- Bên trong tmux:
t_Co=256
Có rất nhiều câu hỏi tương tự về việc Vim chạy ở chế độ 256 màu bên trong tmux (câu trả lời tốt nhất tôi tìm thấy ở đây ), nhưng tôi không nghĩ đó là vấn đề của tôi khi đưa ra thông tin trên.
Tôi có thể nhân đôi sự cố bên ngoài tmux nếu tôi chạy Vim với loại thiết bị đầu cuối được đặt thành screen-256color
:
$ TERM=screen-256color vim
Vì vậy, điều đó khiến tôi tin rằng chỉ đơn giản là có một số khác biệt giữa khả năng xterm-256color
và screen-256color
thiết bị đầu cuối gây ra sự khác biệt về màu sắc. Điều này dẫn đến câu hỏi được đặt ra trong tiêu đề: điều gì cụ thể trong các khả năng của thiết bị đầu cuối khiến màu sắc của Vim khác nhau? Tôi thấy sự khác biệt giữa chạy :set termcap
bên trong và bên ngoài tmux, nhưng tôi tò mò không biết biến nào thực sự gây ra sự khác biệt trong hành vi.
Không phụ thuộc vào câu hỏi trước, liệu các màu Vim có nhất quán khi chạy bên trong hay bên ngoài tmux không? Một số điều tôi đã thử bao gồm:
- Hoàn toàn thiết lập thiết bị đầu cuối mặc định tmux sử dụng
~/.tmux.conf
cho các giá trị khác nhau (một số trái với lời khuyên của Câu hỏi thường gặp về tmux ):
đặt -g mặc định-terminal "screen-256color" đặt -g mặc định-terminal "xterm-256color" đặt -g mặc định-terminal "screen.xterm-256color" đặt -g mặc định-terminal "tmux-256color"
- Bắt đầu sử dụng tmux
tmux -2
.
Trong mọi trường hợp, Vim tiếp tục hiển thị các màu khác nhau bên trong tmux.
xterm-256color
phiên bản (tìm kiếm "38; 5;" trong tệp), nhưng không thể trong screen-256color
. Ví dụ như bất cứ nơi nào có một \e[38;5;81m
trong xterm-256color
(màu # 81 trong bảng 256 màu, một màu giữa màu xanh), screen-256color
chứa \e[34m
thay vì (màu xanh chuẩn của bảng 8 màu). Vì vậy, câu hỏi chính là tại sao vim không sử dụng bảng màu 256 trong trường hợp TERM=screen-256color
.
xterm-256color
phiên bản dường như in màn hình hai lần, lần đầu tiên với các màu kế thừa và sau đó là bảng màu 256 màu. Tìm kiếm ví dụ "F1" trong tệp, bạn sẽ tìm thấy hai kết quả trùng khớp xterm-256color
, lần đầu tiên có \e[34m
màu, lần thứ hai với \e[38;5;81m
. Tôi không biết chuyện gì đang xảy ra ở đây.
set -g default-terminal "screen.xterm-256color"
vào ~/.tmux.conf
và tải lại cấu hình trong tmux (<Cs>: nguồn tập tin ~ / .tmux.conf) làm việc cho tôi (vấn đề nổi bật). thx
script
, bắt đầuvim
, thoátvim
và sau đó thoát khỏiscript
vỏ và đính kèmtypescript
tệp kết quả không? Sau đó lặp lại các bước tương tự vớiTERM=screen-256color vim
thay thế.