96

при использовании vim в tmux я вижу, что включена поддержка 256 цветов. с $ tput цветами

Однако изменение схемы цветов в vim в tmux изменит схему цветов для каждой строки, но не для всего фона. смотреть скриншот

Вот фрагмент моего файла .vimrc, например. Моя первоначальная цветовая схема соляризована и затем после запуска:colorscheme molokai вы видите, что происходит.

Информация

  • гном-терминал
  • удар

в моем ~/.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? Все ли мои фрагменты из файлов выглядят хорошо?

7 ответов7

74

Судя по вашим .bashrc и .profile, оболочки внутри tmux переопределяют настройку «default-terminal» в вашей конфигурации tmux. Что-то вроде этого:

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

Вы можете проверить это, запустив

echo $TERM

в свежей оболочке Tmux.

Tmux довольно требователен к правильной настройке терминала. Если вы можете, установите значение термина в конфигурации терминала gnome, а не в вашем .bashrc. В противном случае окружите эти настройки проверкой TERM "screen" или «screen-256color» и не сбрасывайте их в этом случае.

Tmux ДЕЙСТВИТЕЛЬНО хочет, чтобы терминал был установлен на screen или screen-256color

59

Как объяснено здесь, отключите фоновое стирание цвета (BCE), очистив параметр терминала t_ut (запустите :set t_ut= в Vim, а затем нажмите Control+L, чтобы обновить отображение терминала), чтобы цветовые схемы работали правильно, когда Vim используется внутри tmux и Экран GNU.

17

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

2

Вот что у меня сработало в #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

Установите параметр «default-terminal» в ~/.tmux.conf.

# File: ~/.tmux.conf
set -g default-terminal "screen-256color"  # Mac and Ubuntu
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

Быстрое решение заключается в запуске следующего в терминале.

export TERM=xterm-color

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

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 (цветной или нет). В противном случае то же самое для экрана.

Может быть, это слишком многословно, но у вас есть идея.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .