kehilangan vim colorscheme dalam mode tmux


228

Saya menjalankan iterm2 dan ketika saya dalam mode tmux, colorscheme yang saya atur di vim tidak muncul. Hanya skema warna yang saya atur di iterm. Jika saya menjalankan vim dari shell, colorscheme tampak benar - ini hanya ketika saya dalam mode tmux.

Saya sudah mencoba pengaturan :colorscheme molokaiketika dalam vim (lihat screenshot di bawah) dan itu tidak berubah - lagi, colorscheme default untuk iterm2 tetap ada.

Apakah saya melewatkan beberapa pengaturan untuk iterm atau tmux.conf? Titik saya di github ada di sini.


31
Apa yang terjadi ketika Anda melakukannya $ tmux -2?
romainl

4
Benar-benar itu. Apa bendera -2?
tristen

11
Ini memaksa tmux bekerja dengan 256 warna.
romainl

Jawaban:


252

Saya memiliki masalah yang sama. Satu-satunya perbedaan adalah saya menggunakan solarizelebih daripada itu molokai.

Untuk memperbaiki masalah ini, saya telah menyiapkan alias di ~/.bashrc:

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

Dan atur default-terminalopsi di ~/.tmux.conf:

set -g default-terminal "xterm"

Terakhir, lakukan $ source ~/.bashrcuntuk memuat alias baru.


20
Saya menggunakan ini bukan tmux -2karena ini lebih bertele-tele.
thameera

97
Secara pribadi saya harus menggunakan set -g default-terminal "screen-256color"untuk bekerja daripada xtermpada OS X, sshed ke dalam kotak Ubuntu. Saya merujuk ke situs ini: rhnh.net/2011/08/20/vim-and-tmux-on-osx
waffl

7
Alias ​​di sini tidak masuk akal: itu berpura-pura tmux bahwa itu berjalan di dalam layar atau tmux, yang hampir tidak pernah terjadi. Untuk memberitahu tmux untuk berasumsi bahwa terminal yang digunakannya mendukung 256 warna, jalankan tmux -2atau tmux -2 attach(tmux memutuskan setiap kali Anda melampirkan sesi baru atau yang ada ke terminal). Alias ​​yang masuk akal adalah alias tmux='tmux -2'. Lihat juga dukungan tmux, TERM, dan 256 warna
Gilles 'SO- stop being evil'

3
Saya membaca jawaban lain (tidak dapat menemukan referensi) bahwa bukan praktik yang baik untuk memaksakan JANGKA, meskipun saya tidak tahu pasti. Karena tmux -2opsi dengan set -g default-terminal "screen-256color"bekerja untuk saya, itu akan menjadi pilihan saya. Tapi Terimakasih!
marcelocra

5
Jika .tmux.confpengaturan tampaknya tidak berpengaruh, tutup semua proses tmux dan mulai ulang. Anda bisa melakukannya set -g default-terminal "screen-256color"tanpa mengatur alias apa pun di .bashrc. Saya pikir orang-orang melakukan solusi seperti variabel lingkungan alias karena mereka tidak menutup semua proses tmux setelah mengkonfigurasi .tmux.conf.
Chev

74

Seperti @romainl sebutkan di atas, saya perlu memaksa tmux untuk menggunakan 256 warna dengan menambahkan -2flag:

$ tmux -2

Saya menambahkan alias tmux='tmux -2'ke bash_profile saya, jadi, saya tidak lupa :)


Sebenarnya, itu tidak wajib sama sekali: Saya tidak menggunakan -2tapi saya punya 256 warna yang bekerja di Vim di tmux.
romainl

@romainl Ini perlu jika tmux tidak mendeteksi terminal Anda memiliki 256 warna, yang cukup umum.
Gilles 'SANGAT berhenti menjadi jahat'

1
@Gilles, Vim tidak mendeteksi bahwa terminal mendukung 256 warna karena standar tmux TERMadalah screen. -2tidak berubah TERMdan tidak mengubah warna apa pun yang terkait dengan informasi yang diperoleh Vim dari lingkungannya: :echo &t_Comasih kembali 8. Dengan info yang diberikan, Vim melakukan hal yang benar. Satu-satunya hal yang harus diatur adalah 1. emulator terminal Anda TERMke xterm-256coloratau nilai yang setara seperti urxvt-unicode-256colordan 2. tmux TERMdengan default set -g default-terminal "screen-256color".
romainl

@romainl Sebagian besar lingkungan telah TERMdiatur untuk xterm, tidak xterm-256color, maka kebutuhan untuk menjalankan tmux -2(atau TERM=xterm-256color tmux, atau mengubah termcap atau cara lain untuk mencapai hal yang sama).
Gilles 'SANGAT berhenti menjadi jahat'

1
@Gilles, masalahnya adalah -2 tidak mencapai apa pun yang berdampak pada perilaku Vim mengenai 256 dukungan warna karena satu-satunya hal yang penting bagi Vim adalah JANGKAAN Anda dan itu harus ditetapkan pada akhir rantai Anda: pada Anda terminal emulator. Jika Anda SSH melalui 5 host dan terminal Anda diatur dengan benar, Vim yang diluncurkan pada host ke-5 akan melihat 256 warna Anda TERM dan bertindak sesuai dengannya. Jika Anda menggunakan tmux di setiap titik rantai -2 akan memiliki dampak nol pada perilaku Vim karena yang dilihatnya adalah lingkungannya dibatasi hingga 8 warna karena TERM standar tmux: layar, -2 atau tidak.
romainl

72

Saya mencoba semua solusi di atas dan apa yang akhirnya berhasil bagi saya adalah memasukkan baris berikut .tmux.conf:

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

Saya menggunakan tmux melalui SSH dan ini juga yang bekerja untuk saya walaupun saya tidak menggunakan xterm, hanya SSH biasa.
armen.shimoon

Saya tidak menggunakannya lebih dari ssh dan ini adalah satu-satunya jawaban yang bekerja untuk saya. Sesi iTerm lokal di OSX 10.9.5.
Chev

Ini berfungsi untuk saya (MacOS Mojave + iTerm2 / Alacritty), terima kasih
Adrian Magdas

31

Saya baru tahu mengapa saya mengalami banyak kebingungan. Saya, seperti yang lainnya di sini, mengalami kesulitan untuk mendapatkan pengaturan terminal default untuk diterapkan. Saya ingat bahwa saya memiliki sesi tmux di latar belakang. Saya melampirkan kembali sesi saya, menutup proses saya, dan menutup semua proses tmux. Lain kali saya restart tmux pengaturan terminal default di .tmux.confmulai berlaku. Saya tidak tahu apakah orang lain juga melakukan ini, tetapi saya sarankan untuk menutup semua proses tmux sebelum memodifikasi .tmux.conffile.

Saya dapat setup saya untuk bekerja pada mesin lokal saya (OSX 10.9.5 dengan iTerm2) tanpa modifikasi .bashrcatau .bash_profile. Semua saya lakukan adalah menambahkan baris set -g default-terminal "xterm-256color"ke ~/.tmux.confdan restart semua proses tmux.

Saya mendapatkan pengaturan jarak jauh saya (ssh ke Ubuntu 14.04) untuk bekerja dengan cara yang persis sama tanpa ada modifikasi .bashrc. Saya hanya menambahkan set -g default-terminal "xterm-256color"untuk ~/.tmux.confdi mesin remote saya dan restart semua proses tmux terpencil.

Anda dapat menguji apa yang dilihat Vim dengan melakukan echo $TERMdari dalam sesi tmux. Itu terus mengatakan screensebagai nilai sampai saya me-restart semua proses tmux, pada titik itu tercermin xterm-256colorseperti yang diharapkan.

Semoga itu bisa membantu.


1
Saya telah mengkonfirmasi beberapa sistem operasi lagi sejak posting ini, menutup semua proses dan mengatur default-terminalopsi .tmux.conftelah bekerja 100% dari waktu sejauh ini.
Chev

2
saya juga! saya akan menghabiskan lebih sedikit waktu untuk ini jika jawaban ini lebih jauh.
Sigfried

21

Jadi ini sedikit di sisi basi, tetapi mungkin layak disebutkan bahwa menggunakan layar akan sering merusak tombol Home dan End. Menggunakan

export TERM="xterm-256color"

di harus menjaga fungsionalitas ini dan memungkinkan skema warna (atau saluran listrik) berfungsi dengan baik.


Terima kasih telah menunjukkan ini. Saya tidak tahu itu. Sepertinya masih berfungsi untuk Debian dari apa yang saya lihat sejauh ini. Dalam pembelaan saya, pos itu mengacu pada OSX.
Jpatrick

tmux 1.9a, OSX 10.9.2, iTerm2 Build 1.0.0.20130622 ekspor TERM = "xterm-256color" di .bash_profile, lalu atur iterm ke xterm-256-warna bekerja untuk saya. Tidak perlu mengatur konfigurasi tmux.
agenteo

14

Saya perlu vim untuk menampilkan dengan benar dengan tmux di terminal di ubuntu dan cygwin / mintty di windows. Saya membuatnya bekerja dengan menggabungkan jawaban seperti ini.

Di .bashrc:

alias tmux="tmux -2"

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

berdasarkan jawaban dari pertanyaan ini , halaman wiki Vim ini dan pertanyaan kursor blok ini


Saya punya masalah dengan mintty, dan menambahkan konfigurasi vim memperbaikinya untuk saya. Saya bahkan tidak perlu melakukan tmuxalias.
trigoman

@trigoman, sama untuk saya juga, saya hanya perlu memperbarui .vimrc.
Masood Alam

Saya mencoba semua saran sebelumnya. Baru ditambahkan set t_Co=256ke .vimrc dan sudah diperbaiki. Saya tidak perlu membuat tmuxalias.
Mike

11

Saya telah mencoba semua instruksi di atas, dan saya menemukan hal yang paling penting adalah saya harus secara eksplisit menambahkan baris berikut dalam file .bashrc saya.

export TERM=screen-256color

Saya tidak tahu mengapa alias tmux = "TERM = layar-256color-bce tmux" tidak berfungsi. Saya menggunakan Sierra 10.12.1.


Inilah yang bekerja untuk saya. Hanya ekspor TERM. +1
markovchain

10

Jika ada yang membutuhkan dukungan warna 24-bit:

Tmux mendukung warna 24-bit pada versi 2.2. Jika terminal Anda mendukung warna 24-bit, tambahkan terminal Anda ke pengaturan terminal-override. Sebagai contoh,

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

Daftar periksa lingkungan saya:

  • macOS Sierra 10.12.3
  • iTerm2 3.0.14 (Jenis Terminal Laporan adalah xterm-256color)
  • neovim 0.1.7 (Mengaktifkan warna 24-bit dengan menambahkan: xterm-256colorke .vimrc)
  • tmux 2.3 (Tambahkan set -ga terminal-overrides ",xterm-256color:Tc"ke .tmux.conf)

Tidak ada lagi yang perlu saya tambahkan .bashrcatau .zshrc.

Semoga ini bisa membantu.


Satu-satunya hal yang berhasil untuk saya. apa sebenarnya yang dilakukan ini?
volk

6

Karena ini adalah hasil pertama di Google dan karena tidak ada di atas yang membantu .. ingin memposting ini sehingga seseorang mungkin merasa terbantu

di .vimrc:

set background=dark
set t_Co=256

HTH


Telah menguji dua baris ini, dan mereka bekerja dengan baik untuk Vim saya di WSL-Windows10.
llinfeng

1
Terima kasih banyak. Ini bekerja pada Ubuntu 18 dengan gnome-terminal
Roymunson

4

Menambahkan baris berikut dalam .tmux.conf bekerja untuk saya dengan macOS Sierra 10.12.6,

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


Sama disini. Terima kasih @ waffl untuk menemukan solusi ini!
Adam Erickson

3

Jika Anda menemukan diri Anda dalam posisi yang sama dengan saya, bahwa tidak ada yang di atas bekerja .. coba ini:

di .tmux.conf:

set -g default-terminal "xterm"

dalam konfigurasi bash (mungkin .bashrcatau .bash_profile):

alias tmux="tmux -2"

lalu jalankan:

killall tmux

dan kemudian meluncurkan kembali tmux


3

Jika Anda menggunakan tmuxinatoratau mux, Anda harus menambahkan ini di .bashrcatau .zshrc:

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

Kekuatan ini menggunakan 256 warna dalam terminal.

Kemudian tmux, tmuxinatordan muxperintah semua akan bekerja.


2

Untuk mengatur warna yang benar dan untuk menghilangkan masalah rendering di Ubuntu dan Mac:

Periksa ini


2

Hanya harus berurusan dengan masalah ini, dan meskipun semua jawaban yang diposting sebelumnya sangat membantu, mereka tidak menyelesaikan masalah dalam kasus saya.

Masalah saya telah diperbaiki dengan menghapus baris berikut di saya .vimrc:

set termguicolors

yang merupakan cetakan ulang dengan instruksi lain pula.

Sekarang, dengan baris berikut ditemukan dalam jawaban sebelumnya di saya .tmux.conf:

export TERM="screen-256color"

semuanya bagus dan berwarna-warni.


2

Saya telah menghapus garis set termguicolors, tetapi tidak berhasil. Pengaturan set notermguicolorssebagai gantinya dalam .vimrckarya.


1

Dari halaman manual tmux, tambahkan flag sebagai berikut:

tmux -2

-2Bendera ini memaksa tmux untuk berjalan pada mode 256-warna.

Ini bekerja untuk saya


1

Saya tidak punya banyak keberuntungan mencoba mengekspor TERMterminal yang berbeda atau mengatur default di saya .tmux.conf.

Solusi saya untuk memperbaiki warna vim dalam tmux menambahkan baris ini ke .tmux.conf:

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

Saya tidak yakin mengapa penggantian ini diperlukan karena saya TERM=xtermdan saya memiliki iTerm yang diatur ke xterm juga, tetapi tampaknya berhasil.


0

Saya menggunakan Ubuntu bionic 18.04.4 LTS dan tmux 2.6. Saya memiliki masalah yang sama dan dapat diatasi dengan hanya menambahkan ini ke .bashrc

export TERM=screen-256color

Dan tentu saja jangan lupa untuk sumbernya. source ~/.bashrc

Atau mulai ulang teminal Anda

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.