потерять vim colorscheme в режиме tmux

228

Я использую iterm2, и когда я нахожусь в режиме tmux, цветовая схема, которую я установил в vim, не отображается. Только цветовая схема, которую я установил в iterm. Если я запускаю vim из оболочки, схема цветов выглядит правильно - это только когда я в режиме tmux.

Я попытался установить, :colorscheme molokaiкогда в Vim (см. Скриншот ниже), и он не меняется - опять же, схема цвета по умолчанию для iterm2 остается.

Я пропускаю некоторые настройки для iterm или tmux.conf? Мои дотфлы здесь на github.

Тристень
источник
31
Что происходит, когда вы делаете $ tmux -2?
Ромен
4
Это было полностью. Что за флаг -2?
tristen
11
Это заставляет tmux работать с 256 цветами.
Ромен

Ответы:

252

У меня такая же проблема. Разница лишь в том, что я пользуюсь solarizeскорее тогда molokai.

Чтобы решить эту проблему, я создал псевдоним в ~/.bashrc:

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

И настройте default-terminalопцию в ~/.tmux.conf:

set -g default-terminal "xterm"

Наконец, $ source ~/.bashrcзагрузите новый псевдоним.

Сён Чжон
источник
20
Я использую это, а не tmux -2как это более многословно.
thameera
97
Лично мне пришлось использовать set -g default-terminal "screen-256color"для работы, а не xtermна OS X, sshed в коробку Ubuntu. Я ссылался на этот сайт: rhnh.net/2011/08/20/vim-and-tmux-on-osx
вафля
7
Псевдоним здесь не имеет смысла: он притворяется, что tmux работает внутри screen или tmux, что вряд ли когда-нибудь случится. Чтобы сказать tmux, что предполагается, что терминал, в котором он работает, поддерживает 256 цветов, запустите tmux -2или tmux -2 attach(tmux решает каждый раз, когда вы присоединяете новый или существующий сеанс к терминалу). Разумный псевдоним был бы alias tmux='tmux -2'. См. Также поддержку tmux, TERM и 256 цветов
Жиль "ТАК, перестань быть злым"
3
Я прочитал в каком-то другом ответе (не смог найти ссылку), что не было хорошей практики форсировать СРОК, хотя я точно не знаю. Поскольку tmux -2вариант set -g default-terminal "screen-256color"сработал для меня, это будет мой выбор. Но все равно спасибо!
marcelocra
5
Если .tmux.confнастройка не вступает в силу, закройте все процессы tmux и перезапустите. Вы можете просто обойтисьset -g default-terminal "screen-256color"без установки псевдонима в.bashrc. Я думаю, что люди делают обходные пути, такие как псевдоним переменной среды, потому что они не закрывают все процессы tmux после настройки.tmux.conf.
Chev
74

Как упоминалось выше @romainl, мне нужно было заставить tmux использовать 256 цветов, добавив -2флаг:

$ tmux -2

Я добавил alias tmux='tmux -2'в свой bash_profile, так что я не забываю :)

Тристень
источник
На самом деле, это совсем не обязательно: я не использую, -2но у меня есть 256 цветов, работающих в Vim в tmux.
Ромен
@romainl Это необходимо, если tmux не определяет ваш терминал как имеющий 256 цветов, что довольно часто.
Жиль "ТАК - перестань быть злым"
1
@Gilles, Вим не обнаруживает , что терминал поддерживает 256 цветов , так как по умолчанию tmux в TERMэто screen. -2не меняет TERMи не меняет цвета в зависимости от того, какую информацию Vim получает из своего окружения: по- :echo &t_Coпрежнему возвращается 8. Получив информацию, Вим поступает правильно. Единственные вещи, которые должны быть установлены: 1. Эмулятор вашего терминала TERMв xterm-256colorили эквивалентное значение как urxvt-unicode-256colorи 2. По умолчанию tmux TERMс set -g default-terminal "screen-256color".
romainl
@romainl В большинстве сред TERMустановлено значение xterm, а не необходимость xterm-256color, следовательно, необходимо запускать tmux -2(или TERM=xterm-256color tmuxили изменять termcap или другие способы выполнения того же самого).
Жиль "ТАК - перестань быть злым"
1
@ Жиль, проблема в том, что -2 не выполняет ничего, что могло бы повлиять на поведение Vim относительно поддержки 256 цветов, потому что единственное, что имеет значение для Vim, это ваш TERM, и это должно быть установлено на вашем конце цепочки: в вашем эмулятор терминала Если вы используете SSH через 5 хостов и ваш терминал настроен правильно, Vim, запущенный на 5-м хосте, увидит ваш TERM 256 цветов и будет действовать соответственно. Если вы используете tmux в любой точке цепочки -2, это никак не скажется на поведении Vim, потому что все, что он видит, это ограничено 8 цветами из-за TERM по умолчанию TERM: screen, -2 или нет.
romainl
72

Я перепробовал все решения, описанные выше, и в итоге мне удалось добавить следующие строки .tmux.conf:

set -g default-terminal "xterm-256color"
ElefEnt
источник
Я использую tmux через SSH, и это также работает для меня, хотя я не использую xterm, просто обычный SSH.
armen.shimoon
Я не использовал его поверх ssh, и это был единственный ответ, который сработал для меня. Локальная сессия iTerm в OSX 10.9.5.
Chev
Это работает для меня (MacOS Mojave + iTerm2 / Alacritty), спасибо
Адриан Магдас
31

Я только что обнаружил, почему у меня было много путаницы. Мне, как и другим здесь, было трудно добиться, чтобы настройки терминала по умолчанию вступили в силу. Я вспомнил, что у меня был сеанс tmux в фоновом режиме. Я повторно подключил мой сеанс, закрыл свои процессы и закрыл ВСЕ процессы tmux. В следующий раз, когда я перезапустил tmux, настройки терминала по умолчанию .tmux.confвступили в силу. Я не знаю, делают ли это другие, но я рекомендую закрыть все процессы tmux перед изменением.tmux.conf файла.

Я получил настройки для работы на моей локальной машине (OSX 10.9.5 с iTerm2) без каких-либо изменений для .bashrcили .bash_profile. Все , что я сделал , было добавить строку set -g default-terminal "xterm-256color"в~/.tmux.conf и перезапустить все процессы tmux.

Я получил мою удаленную настройку (SSH к Ubuntu 14.04), чтобы работать точно так же, без каких-либо изменений .bashrc. Я просто добавил set -g default-terminal "xterm-256color"к ~/.tmux.confмне на удаленной машине и перезапустить все процессы удаленных tmux.

Вы можете проверить, что видит Vim, выполнив echo $TERMсеанс tmux. Он продолжал говорить screenв качестве значения, пока я не перезапустил все процессы tmux, после чего он отразил, xterm-256colorкак ожидалось.

Надеюсь, это поможет.

Чев
источник
1
Начиная с этого поста, я подтвердил еще несколько операционных систем: закрытие всех процессов и установка default-terminalпараметра .tmux.confработали до сих пор в 100% случаев.
Chev
2
я тоже! я бы потратил на это меньше времени, если бы этот ответ был дальше.
Зигфрид
21

Так что это немного устарело, но стоит упомянуть, что использование экрана часто ломает клавиши Home и End. С помощью

export TERM="xterm-256color"

Они должны сохранять их функциональность и обеспечивать нормальную работу цветовой схемы (или линии электропередачи).

Jpatrick
источник
Спасибо за указание на это. Я этого не знал. Судя по всему, он все еще работает для Debian Derv из того, что я видел до сих пор. В мою защиту пост был со ссылкой на OSX.
Jpatrick
tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 export TERM = "xterm-256color" в .bash_profile, затем установите iterm на xterm-256-color. Нет необходимости устанавливать какие-либо настройки Tmux.
agenteo
14

Мне нужно Vim для правильного отображения с Tmux в терминале на Ubuntu и Cygwin / Mintty на Windows. Я заставил это работать, комбинируя ответы как это.

В .bashrc:

alias tmux="tmux -2"

В .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

основываясь на ответах на этот вопрос, на этой вики-странице Vim и на этом вопросе курсора блока

Эндрю Джонстон
источник
У меня была проблема с mintty, и добавление конфигурации vim устранило ее для меня. Мне даже не нужно было делать tmuxпсевдоним.
trigoman
@ Trigoman, то же самое для меня, я просто должен был обновить .vimrc.
Масуд Алам
Я перепробовал все предыдущие предложения. Просто добавили set t_Co=256в .vimrc и это было исправлено. Мне не нужно было создавать tmuxпсевдоним.
Майк
11

Я испробовал все приведенные выше инструкции, и я обнаружил, что самое важное - я должен явно добавить следующую строку в мой файл .bashrc.

export TERM=screen-256color

Я не знаю, почему псевдоним tmux = "TERM = screen-256color-bce tmux" не работает. Я использую Sierra 10.12.1.

Лион Лай
источник
Это то, что сработало для меня. Просто экспорт TERM. +1
markovchain
10

Если кому-то нужна поддержка 24-битного цвета:

Tmux поддерживает 24-битный цвет начиная с версии 2.2. Если ваш терминал поддерживает 24-битный цвет, добавьте ваш терминал к настройке переопределения терминала. Например,

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

Контрольный список моей среды:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (тип терминала отчета xterm-256color )
  • neovim 0.1.7 (включить 24-битный цвет, добавив: xterm-256colorк.vimrc )
  • tmux 2.3 (Добавить set -ga terminal-overrides ",xterm-256color:Tc"в .tmux.conf)

Больше ничего мне не нужно добавлять в .bashrcили .zshrc.

Надеюсь, это может помочь.

Янже Чен
источник
единственное, что сработало для меня. что именно это делает?
Volk
6

Так как это первый результат в Google и так как ничего из вышеперечисленного не помогло .. хотел опубликовать это, чтобы кто-то мог найти это полезным

в .vimrc:

set background=dark
set t_Co=256

НТН

HK_
источник
Протестировал эти две строки, и они хорошо работают для моего Vim на WSL-Windows10.
Llinfeng
1
Большое спасибо. Это работало на Ubuntu 18 с терминалом gnome
Roymunson
4

Добавление следующей строки в .tmux.conf помогло мне с macOS Sierra 10.12.6,

установить -g default-terminal "screen-256color"

Зак Чжу
источник
Тоже самое. Спасибо @waffl за то, что нашли это решение!
Адам Эриксон
3

Если вы оказались в том же положении, что и я, то ни одно из вышеперечисленного не сработало .. попробуйте это:

в .tmux.conf:

set -g default-terminal "xterm"

в конфиге bash (может быть .bashrcили .bash_profile):

alias tmux="tmux -2"

и затем запустите:

killall tmux

а затем перезапустить tmux

eliasbagley
источник
3

Если вы используете tmuxinatorили mux, вам нужно будет добавить их в .bashrcили .zshrc:

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

Эти силы заставляют использовать 256 цветов в терминале.

Тогда tmux, tmuxinatorи muxкоманда будет все работать.

qingxp9
источник
2

Чтобы установить правильный цвет и избавиться от проблемы рендеринга в Ubuntu и Mac:

Проверь это

Munish
источник
2

Просто пришлось разобраться с этой проблемой, и хотя все ранее опубликованные ответы были полезны, они не решили проблему в моем случае.

Моя проблема была исправлена ​​путем удаления следующей строки в моем .vimrc:

set termguicolors

который был переделан с другой инструкцией в любом случае.

Теперь со следующей строкой, найденной в предыдущих anwsers в моем .tmux.conf:

export TERM="screen-256color"

все красиво и красочно.

Nitlev
источник
2

Я удалил строку set termguicolors, но она не работает. Установка set notermguicolorsвместо этого в .vimrcработах.

alextanhongpin
источник
1

На странице руководства tmux добавьте флаг следующим образом:

tmux -2

Этот -2флаг заставляет tmux работать в режиме 256 цветов.

Это работает для меня

RyanLiu
источник
1

Мне не очень повезло, пытаясь экспортировать другой TERMили установить default-терминал в моем .tmux.conf.

Моим решением для исправления цветов vim в tmux было добавление этой строки в .tmux.conf:

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

Я не уверен, почему это переопределение было необходимо, учитывая, что для меня TERM=xtermи меня iTerm также установлен на xterm, но, похоже, это работает.

Патрик Льюис
источник
0

Я использую Ubuntu Bionic 18.04.4 LTS и Tmux 2.6. У меня та же проблема, и ее можно решить, просто добавив ее в .bashrc

export TERM=screen-256color

И, конечно же, не забудьте его получить. source ~/.bashrc

Или просто перезапустите свой терминал

babang-parhusip
источник