Підтримка 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.