Hỗ trợ 256 màu cho nền vim trong tmux


98

Trong khi sử dụng vim trong tmux tôi có thể thấy hỗ trợ 256 màu được bật. với màu sắc $ tput

Tuy nhiên, việc thay đổi màu sắc trong vim trong khi ở tmux sẽ thay đổi màu sắc trên cơ sở từng dòng chứ không phải toàn bộ nền. xem ảnh chụp màn hìnhnhập mô tả hình ảnh ở đây

Ví dụ, đây là một đoạn của tệp .vimrc của tôi. Colorscheme ban đầu của tôi là mặt trời tối và sau khi chạy: colorscheme molokai bạn thấy điều gì xảy ra.

thông tin

  • thiết bị đầu cuối gnome
  • bash

trong ~ / .tmux.conf của tôi

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

trong ~ / .vimrc của tôi

    set t_Co=256

trong ~ / .bashrc của tôi

# ryan
export TERM="xterm-256color"
# ryan
alias tmux="tmux -2"

trong ~ / .profile của tôi

# ryan 256 color support
if [ -e /usr/share/terminfo/x/xterm-256color ]; then
    export TERM='xterm-256color'
  else
    export TERM='xterm-color'
  fi

Bất kỳ ý tưởng làm thế nào tôi có thể có được một sự thay đổi đầy đủ màu sắc trong vim? Có phải tất cả các đoạn của tôi từ các tập tin trông tốt?


Điều gì xảy ra nếu bạn nhấn control-l ở chế độ bình thường hoặc thực hiện lệnh ": vẽ lại"?
Heptite

@Heptite không có gì xảy ra vẫn thay đổi màu sắc trên mỗi dòng như trong ảnh chụp màn hình
winchendonsprings

Câu trả lời:


75

Từ giao diện .bashrc và .profile của bạn, các shell bên trong tmux đang ghi đè cài đặt 'default-terminal' trong tmux conf của bạn. Một cái gì đó như thế này:

  • tmux tạo vỏ mới với TERM=screen-256color
  • .bashrc / .profile chạy, đặt TERM=xterm-256color
  • vim chạy, cố gắng sử dụng TERM không chính xác cho tmux

bạn có thể kiểm tra điều này bằng cách chạy

echo $TERM

trong một vỏ tmux tươi.

Tmux tương đối kén chọn về việc có một thiết bị đầu cuối được đặt chính xác. Nếu bạn có thể, hãy đặt giá trị thuật ngữ trong cấu hình của gnome-terminal, không phải trong .bashrc của bạn. Không thực hiện được điều đó, bao quanh các cài đặt đó bằng một kiểm tra cho "màn hình" hoặc "màn hình 256 màu" và không đặt lại chúng trong trường hợp đó.

Tmux THỰC SỰ muốn thiết bị đầu cuối được đặt thành screenhoặcscreen-256color


5
Vâng, bạn đã sửa nó. Tôi chỉ đơn giản nhận xét bất cứ điều gì trong .bashrc và các tệp .profile của tôi phải làm với việc đặt màu thành 256. Đã khởi động lại tmux và vim hoạt động với nền phù hợp và bật 256 màu. Bạn có thể cho tôi biết tập tin cấu hình gnome-terminal nằm ở đâu không? Ngoài ra khi bạn nói tmux muốn thiết bị đầu cuối được đặt thành 'scfeen-256color, bạn có nghĩa là tôi có nó trong tmux.conf của tôi không? Cảm ơn
winchendonsprings

Tôi không có máy có gnome-terminal để kiểm tra, nhưng cài đặt phải ở đâu đó trong GUI, có thể là dưới 'cài đặt cấu hình' hoặc đại loại như thế.
bloy

5
Ngoài ra, vâng, hãy để tmux làm điều riêng của nó với vỏ nó sinh sản. Để lại set -g default-terminal "screen-256color"dòng trong tmux conf của bạn.
bloy

2
Tất cả những điều trên là những gì tôi đã làm sau (đảm bảo TATE được đặt chính xác và không bị ghi đè trong tmux) và THÌ tôi phải sử dụng 'tmux -2' để tải tmux lên.
ph Phantomwhale

Hãy thử if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, nó làm việc cho tôi.
không đối xứng

59

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.


7
Đây là điều duy nhất cuối cùng đã làm việc cho tôi!
Oz123

3
Cuối cùng tôi đã thêm set t_ut=vào vimrc của mình để loại bỏ nhu cầu sử dụng lệnh theo cách thủ công và không cần sử dụng <kbd> Control </ kbd> + <kbd> L </ kbd> vì phiên bắt đầu bị vô hiệu hóa BCE.
erran

Điều này rất cần thiết khi sử dụng PuTTY. Tất cả các kết hợp TATE giảm xuống khi colorcheme có nền. Bổ sung tuyệt vời cho các chủ đề.
botimer

Điều này hoạt động, tuy nhiên khi giải pháp này được áp dụng sao chép và dán bằng chuột cũng sao chép và dán các vạch dấu cách (nếu chúng được tô sáng.)
lông ngựa

17

Tôi đã tìm thấy một cách tốt hơn trên bài viết này . Bạn có thể tạo một bí danh của tmux để tmux -2buộc tmux giả định rằng vỏ đang sử dụng đầu cuối 256 màu.


4

Đây là những gì làm việc cho tôi trong #Ubfox và #Mac:

# File: ~/.bashrc (Ubuntu), ~/.bash_profile (Mac)
# for VIM and TMUC
if [ "$TERM" = "xterm" ]; then
  export TERM=xterm-256color
fi
alias tmux='tmux -2'  # for 256color
alias tmux='tmux -u'  # to get rid of unicode rendering problem

Cài đặt tải lại:

$ nguồn ~ / .bashrc # Ubuntu

$ nguồn ~ / .bash_profile # Mac

Thiết lập .bashrc cho Mac (do tmux sử dụng)

# File: ~/.bashrc (Mac)
source ~/.bash_profile

Thiết lập tùy chọn "default-terminal" trong ~ / .tmux.conf.

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu

1

Một sửa chữa nhanh chóng là chạy sau đây trong thiết bị đầu cuối.

export TERM=xterm-color

Bạn có thể thêm nó vào ~/.bash_profilehồ sơ của bạn hoặc khác để luôn được thiết lập khi bắt đầu.


Cảm ơn! Đây là tất cả những gì tôi cần để thêm vào .zshrcđể chế độ hình ảnh thực sự hiển thị.
danmcardle

1

Tôi đã có vấn đề rất giống với gnome-terminal + tmux + vim nhưng nó cũng được mở rộng cho vấn đề kết hợp khóa cụ thể :. Tôi đã phải kết hợp một vài thứ với nhau. trước hết tôi phải thiết lập .tmux.conf của mình thành:

# Ensure terminal starts with its own colour scheme (helps Vim/Neovim themes to not break)
set -g default-terminal "xterm-256color"
# set -g default-terminal "screen-256color" # no S-Fx keys ;-(
# and ensure the key-codes are xterm alike
set -g xterm-keys on

Sau đó, trong .vimrc:

if $COLORTERM == 'gnome-terminal'
      set t_Co=256
endif
set t_ut=

Và đó là công việc cho các phím và nền.


1

Nếu bạn vẫn gặp phải vấn đề: Tôi nhận thấy rằng vim quay trở lại sử dụng tùy chọn t_Co=8bên trong tmux ngay cả khi $TERMđược đặt thành screen-256color. Cách giải quyết của tôi là đoạn trích này trong vimrc:

if exists("$TMUX")
        set t_Co=256
        set notermguicolors
else
        set termguicolors
endif

Các $TMUXbiến được chỉ điền nếu bên trong một phiên tmux. Trong trường hợp này, tôi cho phép vim sử dụng 256 màu. Lưu ý rằng tôi cũng không đặt termguicolors vì tmux không hỗ trợ màu sắc thực.


0

Chỉ cần bây giờ phải đối mặt với cùng một vấn đề. Dựa trên câu trả lời của bloy và nội dung hiện tại của ~ / .profile của tôi (thực ra, nó giống như winchendonsprings ') Tôi đã giải quyết vấn đề của mình như sau:

~/.profile:

if [[ -z $TMUX ]]; then
    if [ -e /usr/share/terminfo/x/xterm+256color ]; then # may be xterm-256 depending on your distro
        export TERM='xterm-256color'
    else
        export TERM='xterm'
    fi
else
    if [ -e /usr/share/terminfo/s/screen-256color ]; then
        export TERM='screen-256color'
    else
        export TERM='screen'
    fi
fi

Logic rất đơn giản: nếu chúng ta không ở trong phiên tmux, thì hãy sử dụng xterm (có màu hoặc không). Nếu không thì điều tương tự cho màn hình.

Có lẽ nó quá dài dòng, nhưng bạn có ý tưởng.

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.