mất vim colorscheme trong chế độ tmux


228

Tôi đang chạy iterm2 và khi tôi ở chế độ tmux, các màu tôi đã cài đặt trong vim không hiển thị. Chỉ có bảng màu tôi đã đặt trong iterm. Nếu tôi chạy vim từ shell, colorcheme xuất hiện chính xác - chỉ khi tôi ở chế độ tmux.

Tôi đã thử cài đặt :colorscheme molokaikhi ở vim (xem ảnh chụp màn hình bên dưới) và nó không thay đổi - một lần nữa, màu sắc mặc định cho iterm2 vẫn còn.

Tôi có thiếu một số cài đặt cho iterm hoặc tmux.conf không? Dotfles của tôi là trên github ở đây.


31
Điều gì xảy ra khi bạn làm $ tmux -2?
romainl

4
Đó hoàn toàn là nó. Cờ -2 là gì?
tristen

11
Nó buộc tmux hoạt động với 256 màu.
romainl

Câu trả lời:


252

Tôi đã từng gặp vấn đề tương tự. Chỉ khác là tôi đang sử dụng solarizechứ molokai.

Để khắc phục sự cố, tôi đã thiết lập một bí danh trong ~/.bashrc:

alias tmux="TERM=screen-256color-bce tmux"

Và thiết lập default-terminaltùy chọn trong ~/.tmux.conf:

set -g default-terminal "xterm"

Cuối cùng, làm $ source ~/.bashrcđể tải bí danh mới.


20
Tôi sử dụng điều này thay vì tmux -2như thế này dài dòng hơn.
thameera

97
Cá nhân tôi đã phải sử dụng set -g default-terminal "screen-256color"để làm việc chứ không phải xtermtrên OS X, được đưa vào một hộp Ubuntu. Tôi đã đề cập đến trang web này: rhnh.net/2011/08/20/vim-and-tmux-on-osx
waffl

7
Bí danh ở đây không có ý nghĩa: nó giả vờ tmux rằng nó đang chạy bên trong màn hình hoặc tmux, điều này hầu như không bao giờ xảy ra. Để nói với tmux giả định rằng thiết bị đầu cuối đang chạy hỗ trợ 256 màu, hãy chạy tmux -2hoặc tmux -2 attach(tmux quyết định mỗi khi bạn đính kèm một phiên mới hoặc hiện tại vào thiết bị đầu cuối). Một bí danh hợp lý sẽ là alias tmux='tmux -2'. Xem thêm hỗ trợ tmux, TERM và 256 màu
Gilles 'SO- ngừng trở nên xấu xa'

3
Tôi đã đọc trong một số câu trả lời khác (không thể tìm thấy tài liệu tham khảo) rằng đó không phải là một cách thực hành tốt để ép buộc HẠN, mặc dù tôi không biết chắc chắn. Vì tmux -2tùy chọn với công set -g default-terminal "screen-256color"việc cho tôi, đó sẽ là lựa chọn của tôi. Nhưng dù gì cũng cảm ơn!
marcelocra

5
Nếu .tmux.confcài đặt dường như không có hiệu lực, hãy đóng tất cả các quy trình tmux và khởi động lại. Bạn chỉ có thể làm set -g default-terminal "screen-256color"mà không cần đặt bất kỳ bí danh nào .bashrc. Tôi nghĩ mọi người đang thực hiện các giải pháp như bí danh biến môi trường vì họ không đóng tất cả các quy trình tmux sau khi định cấu hình .tmux.conf.
Chev

74

Như @romainl đã đề cập ở trên, tôi cần buộc tmux sử dụng 256 màu bằng cách thêm -2cờ:

$ tmux -2

Tôi đã thêm vào alias tmux='tmux -2'bash_profile của mình, vì vậy, tôi không quên :)


Trên thực tế, nó hoàn toàn không bắt buộc: Tôi không sử dụng -2nhưng tôi có 256 màu hoạt động trong Vim trong tmux.
romainl

@romainl Cần thiết nếu tmux không phát hiện thiết bị đầu cuối của bạn có 256 màu, khá phổ biến.
Gilles 'SO- ngừng trở thành ác quỷ'

1
@Gilles, Vim không phát hiện ra rằng thiết bị đầu cuối hỗ trợ 256 màu vì mặc định của tmux TERMscreen. -2không thay đổi TERMvà không thay đổi bất cứ điều gì liên quan đến màu sắc với thông tin mà Vim nhận được từ môi trường của nó: :echo &t_Covẫn trả về 8. Với thông tin được đưa ra, Vim làm điều đúng đắn. Những điều duy nhất mà phải được thiết lập là 1. giả lập thiết bị đầu cuối của bạn của TERMđể xterm-256colorhoặc một giá trị tương đương như urxvt-unicode-256colorvà mặc định 2. tmux của TERMvới set -g default-terminal "screen-256color".
romainl

@romainl Hầu hết các môi trường đã TERMđược đặt thành , do đó, xtermkhông xterm-256colorcần phải chạy tmux -2(hoặc TERM=xterm-256color tmux, hoặc thay đổi thuật ngữ hoặc các cách khác để thực hiện cùng một điều).
Gilles 'SO- ngừng trở nên xấu xa'

1
@Gilles, vấn đề là -2 không hoàn thành bất kỳ điều gì có ảnh hưởng đến hành vi của Vim liên quan đến hỗ trợ 256 màu bởi vì điều duy nhất quan trọng với Vim là HẠN của bạn và điều đó sẽ được đặt ở cuối chuỗi của bạn: trong trình giả lập thiết bị đầu cuối. Nếu bạn SSH qua 5 máy chủ và thiết bị đầu cuối của bạn được đặt chính xác, Vim được khởi chạy trên máy chủ thứ 5 sẽ thấy HẠN 256 màu của bạn và hành động tương ứng. Nếu bạn sử dụng tmux tại bất kỳ điểm nào của chuỗi -2 sẽ không ảnh hưởng đến hành vi của Vim vì tất cả những gì nó thấy là môi trường của nó bị giới hạn ở 8 màu do màn hình TERM: mặc định, -2 hoặc không.
romainl

72

Tôi đã thử tất cả các giải pháp ở trên và những gì cuối cùng đã làm cho tôi là đưa các dòng sau vào .tmux.conf:

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

Tôi đang sử dụng tmux qua SSH và đây cũng là điều làm việc cho tôi mặc dù tôi không sử dụng xterm, chỉ là SSH thông thường.
armen.shimoon

Tôi đã không sử dụng nó trên ssh và đây là câu trả lời duy nhất phù hợp với tôi. Phiên iTerm cục bộ trong OSX 10.9.5.
Chev

Điều này hiệu quả với tôi (MacOS Mojave + iTerm2 / Alacritty), cảm ơn
Adrian Magdas

31

Tôi chỉ phát hiện ra lý do tại sao tôi có nhiều nhầm lẫn. Tôi, giống như những người khác ở đây, đã gặp khó khăn khi cài đặt thiết bị đầu cuối mặc định có hiệu lực. Tôi nhớ rằng tôi đã có một phiên tmux trong nền. Tôi đã đính kèm lại phiên của mình, đóng các quy trình của mình và đóng TẤT CẢ các quy trình tmux. Lần sau, tôi khởi động lại tmux, cài đặt đầu cuối mặc định .tmux.confbắt đầu có hiệu lực. Tôi không biết những người khác cũng đang làm điều này hay không nhưng tôi khuyên bạn nên đóng tất cả các quy trình tmux trước khi sửa đổi .tmux.conftệp.

Tôi đã thiết lập để hoạt động trên máy cục bộ của mình (OSX 10.9.5 với iTerm2) mà không có bất kỳ sửa đổi nào đối với .bashrchoặc .bash_profile. Tất cả những gì tôi đã làm là thêm dòng set -g default-terminal "xterm-256color"vào ~/.tmux.confvà khởi động lại tất cả các quy trình tmux.

Tôi đã thiết lập từ xa (ssh sang Ubuntu 14.04) để hoạt động chính xác theo cùng một cách mà không cần sửa đổi gì .bashrc. Tôi chỉ đơn giản là thêm set -g default-terminal "xterm-256color"vào ~/.tmux.conftrên máy tính từ xa của tôi và bắt đầu lại tất cả các quy trình tmux từ xa.

Bạn có thể kiểm tra những gì Vim đang nhìn thấy bằng cách thực hiện echo $TERMtừ trong phiên tmux. Nó cứ nói screenlà giá trị cho đến khi tôi khởi động lại tất cả các quy trình tmux, tại thời điểm nó phản ánhxterm-256color như mong đợi.

Mong rằng sẽ giúp.


1
Tôi đã xác nhận trên một số hệ điều hành nữa kể từ bài đăng này, việc đóng tất cả các quy trình và thiết lập default-terminaltùy chọn .tmux.confđã hoạt động 100% cho đến nay.
Chev

2
tôi cũng vậy! tôi sẽ dành ít thời gian hơn cho câu hỏi này nếu câu trả lời này xa hơn.
Sigfried

21

Vì vậy, điều này hơi khó hiểu, nhưng có lẽ đáng nói là việc sử dụng màn hình thường sẽ phá vỡ phím Home và End. Sử dụng

export TERM="xterm-256color"

nên giữ chức năng của những thứ này và cho phép bảng màu (hoặc powerline) hoạt động tốt.


Cảm ơn đã chỉ ra điều này. Tôi không biết điều đó. Nó dường như vẫn hoạt động cho Debian derv từ những gì tôi đã thấy cho đến nay. Để bảo vệ tôi, bài viết có liên quan đến OSX.
Jpatrick

tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 export TERM = "xterm-256color" trong .bash_profile, sau đó đặt iterm thành xterm-256-color làm việc cho tôi. Không cần thiết lập bất kỳ cấu hình tmux.
đặc vụ

14

Tôi cần vim để hiển thị chính xác với tmux trong thiết bị đầu cuối trên ubfox và cygwin / mintty trên windows. Tôi đã làm cho nó hoạt động bằng cách kết hợp các câu trả lời như thế này.

Trong .bashrc:

alias tmux="tmux -2"

Trong .vimrc:

" use 256 colors in terminal
if !has("gui_running")
    set t_Co=256
    set term=screen-256color
endif

" fix cursor display in cygwin
if has("win32unix")
    let &t_ti.="\e[1 q"
    let &t_SI.="\e[5 q"
    let &t_EI.="\e[1 q"
    let &t_te.="\e[0 q"
endif

dựa trên câu trả lời từ câu hỏi này, trang wiki Vim nàycâu hỏi con trỏ khối này


Tôi gặp vấn đề với mintty và việc thêm cấu hình vim đã sửa nó cho tôi. Tôi thậm chí không cần phải làm tmuxbí danh.
trigoman

@trigoman, tôi cũng vậy, tôi phải cập nhật .vimrc.
Masood Alam

Tôi đã thử tất cả các đề xuất trước đó. Chỉ cần thêm set t_Co=256vào .vimrc và nó đã được sửa. Tôi không cần tạo tmuxbí danh.
Mike

11

Tôi đã thử tất cả các hướng dẫn ở trên và tôi phát hiện ra điều quan trọng nhất là tôi phải thêm một cách rõ ràng dòng sau vào tệp .bashrc của mình.

export TERM=screen-256color

Tôi không biết tại sao bí danh tmux = "TERM = screen-256color-bce tmux" không hoạt động. Tôi sử dụng Sierra 10.12.1.


Đây là những gì làm việc cho tôi. Chỉ cần xuất khẩu đơn giản của HẠN. +1
markovchain

10

Trong trường hợp bất cứ ai cần hỗ trợ màu 24-bit:

Tmux hỗ trợ màu 24 bit như phiên bản 2.2. Nếu thiết bị đầu cuối của bạn hỗ trợ màu 24 bit, hãy thêm thiết bị đầu cuối của bạn vào cài đặt ghi đè thiết bị đầu cuối. Ví dụ,

set -ga terminal-overrides ",xterm-256color:Tc"

Danh sách kiểm tra môi trường của tôi:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (Loại thiết bị đầu cuối báo cáo là xterm-256color)
  • neovim 0.1.7 (Kích hoạt màu 24 bit bằng cách thêm: xterm-256colorvào.vimrc )
  • tmux 2.3 (Thêm set -ga terminal-overrides ",xterm-256color:Tc"vào .tmux.conf)

Không có gì khác tôi cần thêm vào .bashrchoặc .zshrc.

Hy vọng điều này có thể giúp đỡ.


điều duy nhất làm việc cho tôi Chính xác thì nó làm gì?
volk

6

Vì đây là kết quả đầu tiên trên Google và vì không có điều nào ở trên giúp được .. muốn đăng bài này để ai đó có thể thấy nó hữu ích

trong .vimrc:

set background=dark
set t_Co=256

HTH


Đã thử nghiệm hai dòng này và chúng hoạt động tốt cho Vim của tôi trên WSL-Windows10.
llinfeng

1
Cảm ơn rất nhiều. Điều này hoạt động trên Ubuntu 18 với thiết bị đầu cuối gnome
Roymunson

4

Thêm dòng sau vào .tmux.conf đã hoạt động với tôi với macOS Sierra 10.12.6,

đặt -g mặc định-terminal "screen-256color"


Tương tự ở đây. Cảm ơn bạn @waffl vì đã tìm ra giải pháp này!
Adam Erickson

3

Nếu bạn thấy mình trong cùng một câu như tôi, thì không có cái nào ở trên hoạt động cả .. hãy thử điều này:

trong .tmux.conf:

set -g default-terminal "xterm"

trong bash config (có thể .bashrchoặc .bash_profile):

alias tmux="tmux -2"

và sau đó chạy:

killall tmux

và sau đó khởi chạy lại tmux


3

Nếu bạn sử dụng tmuxinatorhoặc mux, bạn sẽ cần thêm những thứ này vào .bashrchoặc .zshrc:

alias tmux='TERM=screen-256color tmux -2'
alias tmuxinator='TERM=screen-256color tmuxinator'
alias mux='TERM=screen-256color mux'

Các lực lượng này sử dụng 256 màu trong thiết bị đầu cuối.

Sau đó tmux, tmuxinatormuxlệnh sẽ làm việc tất cả.



2

Chỉ cần xử lý vấn đề này, và mặc dù tất cả các câu trả lời được đăng trước đó đều hữu ích, nhưng chúng không giải quyết được vấn đề trong trường hợp của tôi.

Vấn đề của tôi đã được khắc phục bằng cách xóa dòng sau trong .vimrc:

set termguicolors

mà đã được làm lại với một hướng dẫn khác anyway.

Bây giờ, với dòng sau được tìm thấy trong các anwsers trước trong tôi .tmux.conf:

export TERM="screen-256color"

tất cả là tốt đẹp và đầy màu sắc.


2

Tôi đã xóa dòng set termguicolors, nhưng nó không hoạt động. set notermguicolorsThay vào đó là thiết lập trong .vimrccông trình.


1

Từ trang man tmux, thêm cờ như sau:

tmux -2

-2Cờ này buộc tmux chạy trên chế độ 256 màu.

Điều này làm việc cho tôi


1

Tôi đã không gặp nhiều may mắn khi cố gắng xuất một TERMthiết bị đầu cuối mặc định khác hoặc đặt trong thiết bị đầu cuối của mình .tmux.conf.

Giải pháp của tôi để sửa màu vim trong tmux là thêm dòng này vào .tmux.conf:

set -g terminal-overrides 'xterm:colors=88'

Tôi không chắc tại sao việc ghi đè này lại cần thiết vì tôi TERM=xtermvà tôi cũng đã cài đặt iTerm thành xterm, nhưng có vẻ như nó hoạt động.


0

Tôi đang sử dụng Ubuntu bionic 18.04.4 LTS và tmux 2.6. Tôi có cùng một vấn đề và nó có thể được giải quyết bằng cách thêm nó vào .bashrc

export TERM=screen-256color

Và dĩ nhiên đừng quên nguồn này. source ~/.bashrc

Hoặc chỉ cần khởi động lại thái dương của bạ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.