Tại sao màu Vim trông khác nhau bên trong và bên ngoài của tmux?


29

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:

nhập mô tả hình ảnh ở đây

TERMBiế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-256colorscreen-256colorthiế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 termcapbê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.confcho 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.


Bạn có thể vui lòng bắt đầu script, bắt đầu vim, thoát vimvà sau đó thoát khỏi scriptvỏ và đính kèm typescripttệp kết quả không? Sau đó lặp lại các bước tương tự với TERM=screen-256color vimthay thế.
egmont ngày


1
Tôi có thể thấy các chuỗi thoát 256 màu trong xterm-256colorphiê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;81mtrong xterm-256color(màu # 81 trong bảng 256 màu, một màu giữa màu xanh), screen-256colorchứa \e[34mthay 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.
egmont ngày

Một điều thú vị khác là xterm-256colorphiê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[34mmà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.
egmont ngày

Thêm set -g default-terminal "screen.xterm-256color"vào ~/.tmux.confvà 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
dtrckd

Câu trả lời:


16

tmuxkhông hỗ trợ khả năng terminfo bce(xóa màu ngược), để vimkiểm tra, để quyết định có sử dụng lược đồ "màu mặc định" của nó hay không.

Đặc điểm đó tmuxđã được đề cập một vài lần -


Chính xác là loại câu trả lời thỏa mãn trí tuệ mà tôi đang tìm kiếm. Cảm ơn bạn!
Rusty Shackleford

17

Tôi đã có vấn đề tương tự trước đây. Bình luận màu xanh lam trong Vim rất khó đọc. Trong .tmux.conftôi đặt điều này:

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

Và trong .vimrc:

set background=dark

Bây giờ, nó trông như sau và hoạt động cả trong Gnome Terminal và Cygwin: nhập mô tả hình ảnh ở đây


3
Điều này đã giải quyết nó cho tôi. Vì một số lý do, bên trong tmux, vim đã không phát hiện ra một nền tối. Hoàn toàn thiết lập bg=darktrong vimrc của tôi đã sửa nó.
Adam Keenan

Strange - tôi $TERMcả bên trong và bên ngoài tmuxđã "xterm-256color"và thiết lập một cách rõ ràng Backgroun đã làm nó cho tôi là tốt. Cảm ơn bạn!
nronnei

Làm việc cho tôi quá. Tôi nghĩ vấn đề là sttermdo xfce4-terminalmọi thứ trông có vẻ thoải mái (bình luận xuất hiện cyanthay vì bluerất khó đọc với nền tối). Sau khi thay đổi, mọi thứ hoạt động tốt. Nhưng hãy nhớ thêm unlet! skip_defaults_vim source $VIMRUNTIME/defaults.vimvào tệp vimrc để sử dụng tô sáng cú pháp, v.v ...
Abinash Dash

2

Nhờ phân tích của @ egmont về màu sắc mà Vim đã xuất hiện khi nào TERM=screen-256color, tôi được truyền cảm hứng để xem bảng màu mà Vim đang sử dụng trong hai kịch bản.

Vim báo cáo rằng nó đang sử dụng bảng defaultmàu trong cả hai trường hợp. Tôi nghĩ điều đó thật kỳ quặc bởi vì bảng defaultmàu trên Fedora 25 ( /usr/share/vim/vim80/colors/default.vim) dường như không khớp với màu tôi thực sự nhìn thấy khi nào TERM=xterm-256color. Nếu tôi thiết lập rõ ràng bảng màu sử dụng :colorscheme defaultkhi nào TERM=xterm-256color, ngoại hình của Vim sẽ thay đổi khi đó TERM=screen-256color. Để lấy lại màu sắc như ban đầu khi tôi bắt đầu Vim, tôi phải sử dụng bảng ronmàu. Phát triển!

Tôi đã tìm thấy câu trả lời Ask Ubuntu cho thấy rằng khi Vim báo cáo rằng nó đang sử dụng bảng defaultmàu, nó không nhất thiết có nghĩa default.vimmà là một số bảng màu cụ thể theo chủ đề. Như câu trả lời chỉ ra, một chủ đề tối (mà tôi đang sử dụng) tương ứng với bảng ronmàu, giống như tôi đã khám phá ở trên. (Mặc dù bài đăng này liên quan đến Ubuntu, tôi cho rằng OP đã sử dụng Gnome.)

Tôi cũng tìm thấy một câu hỏi khác dường như mô tả cùng một vấn đề tôi đang gặp phải. Tôi đã xem qua nó trong khi tìm kiếm trước khi tôi đăng câu hỏi này, nhưng, vì một số lý do, bảng màu không khiến tôi thấy có liên quan.

Cuối cùng tôi đã làm những gì @LapshinDmitry đã làm trong câu trả lời của anh ấy và đặt rõ ràng colorscheme ronvào ~/.vimrctập tin của tôi . Bây giờ, cho dù tôi bắt đầu Vim bên trong hay bên ngoài tmux, màu sắc đều xuất hiện như nhau. Hạn chế duy nhất là nếu tôi từng thay đổi chủ đề máy tính để bàn của mình từ hương vị tối sang hương vị nhẹ, Vim sẽ không tự động chuyển sang bảng màu chủ đề sáng "mặc định", rõ ràng peachpuff. Tôi có thể sống với điều đó, vì tôi sẽ không bao giờ thay đổi chủ đề của mình.

Tôi sẽ không chấp nhận câu trả lời này vì tôi xem xét rõ ràng việc thiết lập bảng màu trong ~/.vimrccách giải quyết thay vì giải pháp. Nếu ai đó có thể giải thích lý do tại sao Vim tải một bảng màu "mặc định" khác tùy thuộc vào giá trị của TERM, tôi sẽ vui lòng chấp nhận câu trả lời đó, vì tôi quan tâm hơn đến việc tìm hiểu nguyên nhân gốc rễ. Tôi nghi ngờ nó có liên quan đến cách Vim diễn giải các khả năng của thiết bị đầu cuối giữa hai tệp terminfo.


Tôi cũng tò mò tại sao lại vimcư xử theo cách này. Rốt cuộc, bcekhả năng không liên quan gì đến số lượng màu có sẵn.
egmont

@egmont Tôi đã giải thích câu trả lời của @ ThomasDickey là: 1) Vim kiểm tra bcekhả năng của thiết bị đầu cuối, 2) nếu có, chọn bảng màu "A", 3) nếu không, hãy chọn bảng màu "B". Tôi tin rằng độ sâu màu là như nhau trong cả hai trường hợp (ví dụ 256 màu, như t_Cohiển thị). Đó chỉ là bảng màu "B" trên hệ thống của tôi chỉ sử dụng bảng màu 8 màu mặc dù có thể có 256 màu (tôi nghĩ điều đó giải thích những gì bạn quan sát được trong phân tích bản thảo của bạn; vui lòng sửa lại cho tôi nếu tôi sai). Hãy nhớ rằng, sau khi tôi chạy :colorscheme ron, tôi thấy các chuỗi thoát 256 màu trong cùng một phiên Vim.
Rusty Shackleford

Cảm ơn vì lời giải thích - tôi vẫn không thể thấy bất kỳ lý do nào đằng sau điều này. Đừng bận tâm. vimcó những quyết định thiết kế thực sự kỳ lạ.
egmont

0

Biến TATE của tôi là Bên ngoài tmux: xterm-256color Bên trong tmux: screen-256color

Điều đó đúng và làm việc cho tôi. Hãy thử nó với một thiết bị đầu cuối khác (tôi sử dụng urxvt) để xem Gnome Terminal có phải là vấn đề không. Là một tài tài, hay nói, qua, qua, qua một khác, qua giữ, qua, qua một khác, qua, qua, qua, khi khác mới, khác mới, khi khác mới đăng, mới, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng, mới đăng cam cam 

Ngoài ra kiểm tra COLORTERM(của tôi được đặt thành rxvt) và unset TERMCAP.


Cảm ơn những lời đề nghị. Tôi chạy các thử nghiệm cùng với urxvt (bên ngoài TERMrxvt-unicode-256color) sử dụng một cách phù hợp ~/.Xdefaultsvà không may vẫn quan sát màu sắc khác nhau trong và ngoài của tmux. Đối với kịch bản gnome-terminal, COLORTERMtruecolorTERMCAPtrống cả bên trong và bên ngoài tmux. Đối với kịch bản urxvt, COLORTERMrxvt-xpmbên ngoài và truecolorbên trong tmux, trong khi TERMCAPđang làm rỗng cả bên trong và bên ngoài tmux.
Rusty Shackleford ngày

@RustyShackleford cái này chỉ dành cho Vim? Bạn đang sử dụng 'thuật ngữ'? Hãy xem :help xterm-true-colorhoặc thử với một cấu hình Vim mặc định hơn.
laktak ngày

Cho đến nay tôi chỉ nhận thấy vấn đề ở Vim (như tôi đã nói, gần đây tôi mới bắt đầu sử dụng tmux). Ví dụ, dấu nhắc thiết bị đầu cuối và đầu ra Git CLI của tôi dường như có cùng màu cả bên trong và bên ngoài tmux. Tôi không đặt termguicolorstrong tôi .vimrc:set termguicolors?báo cáo notermguicolorstrong cả hai trường hợp. Tôi sẽ xem xét chủ đề trợ giúp mà bạn tham khảo; cảm ơn!
Rusty Shackleford ngày

0

Để tôi tham khảo sau này khi tôi chắc chắn google thiết lập máy tiếp theo của tôi.

  • Vim8 / Neovim
  • Windows 10
  • Bash Gash
  • Tmux 2.7

Sử dụng các hướng dẫn sau để nhận các tệp nhị phân và DLL cần thiết vào Pit của Git bash:

https://blog.pjsen.eu/?p=440

Sử dụng các lệnh này để cấu hình:

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
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.