Підтримка 256 кольорів для фону vim у tmux


98

під час використання vim в межах tmux я бачу, що підтримується 256 кольорів. з кольорами $ tput

Однак зміна схеми кольорів у vim, а в tmux змінить схему кольорів на основі рядка, але не на весь фон. див. скріншотвведіть тут опис зображення

Ось, наприклад, фрагмент файлу my .vimrc. Моя оригінальна кольорова схема є соляризованою темною, а потім після запуску.

інформація

  • гном-термінал
  • баш

в моєму ~ / .tmux.conf

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

в моєму ~ / .vimrc

    set t_Co=256

в моєму ~ / .bashrc

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

в моєму ~ / .profile

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

Будь-які ідеї, як я можу отримати повну зміну схеми кольорів у vim? Чи добре виглядають усі мої фрагменти з файлів?


Що станеться, якщо натиснути control-l у звичайному режимі або виконати команду ": перемалювати"?
— Гептит

@Heptite нічого не відбувається, все ж зміна кольору відбувається за рядком, як на скріншоті
— winchendonsprings

Відповіді:


75

З вигляду ваших .bashrc та .profile оболонки всередині tmux переосмислюють налаштування 'термінал за замовчуванням' у вашій конфіденційності tmux. Щось на зразок цього:

  • tmux створює нову оболонку з TERM=screen-256color
  • .bashrc / .profile запустити, встановити TERM=xterm-256color
  • vim запускає, намагається використовувати неправильний TERM для tmux

ви можете перевірити це, запустивши

echo $TERM

у свіжому панцирі tmux.

Tmux відносно вимогливий до правильного встановлення терміналу. Якщо ви можете, встановіть значення терміна в конфігурації gnome-terminal, а не у вашому .bashrc. Якщо цього не зробити, оточіть ці налаштування за допомогою позначки TERM "screen" або "screen-256color", і не скидайте їх у такому випадку.

Tmux дійсно хоче, щоб термінал встановлений на screenабоscreen-256color


5
Ну ви це виправили. Я просто прокоментував що-небудь у своїх .bashrc та моїх .profile-файлах, пов’язаних із встановленням кольору на 256. Знову tmux і vim працює з належним фоном та 256 кольорами. Чи можете ви сказати мені, де знаходиться конфігураційний файл gnome-terminal? Крім того, коли ви говорите, що tmux хоче, щоб термінал встановлений на 'scfeen-256color, ти маєш на увазі, як я це маю в своєму tmux.conf? Спасибі
— winchendonsprings

У мене немає зручної для перевірки машини з gnome-терміналом, але налаштування має бути десь у графічному інтерфейсі, ймовірно, під «налаштуваннями профілю» чи щось подібне.
— цвіте

5
Крім того, так, нехай tmux робить власну справу з оболонками, які вона породжує. Залиште set -g default-terminal "screen-256color"рядок у конфлікті tmux.
— цвіте

2
Все вищезазначене - це те, що я робив після цього (переконайтесь, що TERM правильно встановлений і не відмінений у tmux), а потім мені довелося використовувати 'tmux -2' для завантаження tmux.
— фантомний кит

Спробуйте if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, це працювало на мене.
— асиметричний

59

Як пояснено тут , вимкніть стирання фонового кольору (BCE), очистивши t_utопцію терміналу (запустіть :set t_ut=у Vim, а потім натисніть Control+, Lщоб оновити дисплей терміналу), щоб кольорові схеми справно працювали, коли Vim використовується на екрані tmux та GNU.


7
це єдине, що нарешті працювало для мене!
— Oz123

3
В кінцевому підсумку я додав set t_ut=до свого vimrc, який усуває необхідність вручну використовувати команду, і немає необхідності використовувати <kbd> Control </kbd> + <kbd> L </kbd>, оскільки сеанс починається з відключення BCE.
— erran

Це важливо при використанні PuTTY. Усі комбінації термінів опадають, коли кольорова схема має тло. Чудове доповнення до нитки.
— ботимер

Це працює, проте коли застосовується це рішення, копіюючи та вставляючи за допомогою миші, також копіює та вставляє пробіли проміжними лініями (якщо вони виділені.)
— кінське волосся

17

Я знайшов кращий спосіб на цій посаді . Ви можете зробити псевдонім tmux, tmux -2який змусить tmux припустити, що оболонка використовує 256 кольоровий термінал.


4

Ось що працювало для мене в #Ubuntu та #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

Перезавантажте налаштування:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Налаштування .bashrc для Mac (як це використовується tmux)

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

Встановіть параметр "типовий термінал" у ~ / .tmux.conf.

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

1

Швидке виправлення - виконати наступне в терміналі.

export TERM=xterm-color

Ви можете додати його у свій ~/.bash_profileчи інший профіль, який завжди буде налаштовано на старт.


Дякую! Це все, що мені потрібно було додати до свого, .zshrcщоб візуальний режим насправді був видно.
— danmcardle

1

У мене була дуже схожа проблема для gnome-terminal + tmux + vim, але вона поширилася і на конкретну проблему комбінації клавіш:. Мені довелося поєднувати кілька речей разом. Перш за все, мені довелося встановити .tmux.conf на:

# 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

Потім у .vimrc:

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

І це зробило роботу з ключами та фоном.


1

Якщо у вас все ще виникають проблеми: я помітив, що vim повертається до використання опції t_Co=8всередині tmux, навіть якщо $TERMвстановлено значення screen-256color. Моє вирішення цього фрагмента в vimrc:

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

$TMUXМінлива заповнюється тільки , якщо всередині tmux сесії. У цьому випадку я дозволяю vim використовувати 256 кольорів. Зауважте, що я також скидаю термікологи, оскільки tmux не підтримує справжні кольори.


0

Просто зараз зіткнулася з тією ж проблемою. На основі відповіді Блоя та поточного вмісту мого ~ / .profile (насправді це те саме, що і winchendonsprings ') я вирішив свою проблему наступним чином:

~/.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

Логіка проста: якщо ми не знаходимось у сесії tmux, то використовуємо xterm (кольоровий чи ні). Інакше те ж саме для екрана.

Можливо, це занадто багатослівно, але у вас виникла ідея.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.