Dukungan 256 warna untuk latar belakang vim di tmux

98

saat menggunakan vim dalam tmux saya dapat melihat bahwa dukungan 256 warna diaktifkan. dengan warna $ tput

Namun mengubah skema warna dalam vim sementara di tmux akan mengubah skema warna pada basis per baris tetapi tidak seluruh latar belakang. lihat tangkapan layarmasukkan deskripsi gambar di sini

Berikut ini cuplikan dari file .vimrc saya. Colorscheme asli saya solarisasi gelap dan kemudian setelah berjalan: colorscheme molokai Anda melihat apa yang terjadi.

info

  • terminal gnome
  • pesta

di ~ / .tmux.conf saya

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

di ~ / .vimrc saya

    set t_Co=256

di ~ / .bashrc saya

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

di profil ~ /. saya

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

Ada ide bagaimana saya bisa mendapatkan perubahan colorscheme penuh di vim? Apakah semua cuplikan dari file saya terlihat bagus?

winchendonsprings
sumber
Apa yang terjadi jika Anda menekan control-l dalam mode normal, atau menjalankan perintah ": redraw"?
Heptite
@Heptite tidak ada yang terjadi masih perubahan warna per baris seperti pada tangkapan layar
winchendonsprings

Jawaban:

75

Dari tampilan .bashrc dan .profile Anda, shell di dalam tmux menimpa pengaturan 'default-terminal' di tmux conf Anda. Sesuatu seperti ini:

  • tmux membuat shell baru dengan TERM=screen-256color
  • .bashrc / .profile dijalankan, atur TERM=xterm-256color
  • vim berjalan, mencoba menggunakan TERM yang salah untuk tmux

Anda dapat memeriksa ini dengan menjalankan

echo $TERM

dalam shell tmux segar.

Tmux relatif pilih-pilih untuk mengatur terminal dengan benar. Jika Anda bisa, tetapkan nilai term dalam konfigurasi gnome-terminal, bukan di .bashrc Anda. Gagal itu, mengelilingi pengaturan itu dengan tanda centang untuk "layar" atau "layar-256color", dan jangan mengatur ulang mereka dalam kasus itu.

Tmux BENAR-BENAR menginginkan terminal diatur ke screenatauscreen-256color

taktik
sumber
5
Baik Anda memperbaikinya. Saya hanya berkomentar apa pun di file .bashrc dan .profile saya yang ada hubungannya dengan pengaturan warna ke 256. Memulai ulang tmux dan vim bekerja dengan latar belakang yang tepat dan 256 warna diaktifkan. Bisakah Anda memberi tahu saya di mana file konfigurasi gnome-terminal? Juga ketika Anda mengatakan tmux ingin terminal diatur ke 'scfeen-256color, Maksud Anda seperti saya memilikinya di tmux.conf saya? Terima kasih
winchendonsprings
Saya tidak memiliki mesin dengan gnome-terminal yang berguna untuk diperiksa, tetapi pengaturannya harus di suatu tempat di GUI, mungkin di bawah 'pengaturan profil' atau sesuatu seperti itu.
bloy
5
Juga, ya, biarkan tmux melakukan hal sendiri ke shell yang ditimbulkannya. Tinggalkan set -g default-terminal "screen-256color"baris di tmux conf Anda.
bloy
2
Semua hal di atas adalah apa yang saya kejar (memastikan TERM dengan benar diatur dan tidak diganti dalam tmux), dan MAKA saya harus menggunakan 'tmux -2' untuk memuat tmux ke atas.
phantomwhale
Coba if [[ $TERM == xterm ]]; then TERM=xterm-256color; fi, itu berhasil untuk saya.
asimetris
59

Seperti yang dijelaskan di sini , nonaktifkan Background Color Erase (BCE) dengan menghapus t_utopsi terminal (jalankan :set t_ut=di Vim dan kemudian tekan Control+ Luntuk menyegarkan tampilan terminal) sehingga skema warna berfungsi dengan baik ketika Vim digunakan di dalam tmux dan layar GNU.

sunaku
sumber
7
ini satu-satunya yang akhirnya berhasil untukku!
Oz123
3
Saya akhirnya menambahkan set t_ut=ke vimrc saya yang menghilangkan kebutuhan untuk menggunakan perintah secara manual dan tidak perlu menggunakan <kbd> Kontrol </kbd> + <kbd> L </kbd> sejak sesi dimulai dengan BCE dinonaktifkan.
erran
Ini penting ketika menggunakan Putty. Semua kombinasi JANGKA gagal ketika skema warna memiliki latar belakang. Tambahan yang bagus untuk utas.
botimer
Ini bekerja, namun ketika solusi ini diterapkan menyalin dan menempel dengan mouse juga menyalin dan menempel spasi spasi garis (jika mereka disorot.)
rambut kuda
17

Saya telah menemukan cara yang lebih baik di pos ini . Anda dapat membuat alias tmux tmux -2yang akan memaksa tmux untuk mengasumsikan bahwa shell menggunakan terminal 256 warna.

Boogy
sumber
4

Inilah yang berhasil bagi saya di #Ubuntu dan #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

Muat ulang pengaturan:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

Siapkan .bashrc untuk Mac (seperti yang digunakan oleh tmux)

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

Atur opsi "default-terminal" di ~ / .tmux.conf.

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

Perbaikan cepat adalah menjalankan yang berikut ini di terminal.

export TERM=xterm-color

Anda dapat menambahkannya ke ~/.bash_profileprofil Anda atau lainnya untuk selalu disetel saat mulai.

Peter Dietz
sumber
Terima kasih! Ini semua yang saya perlu tambahkan ke saya .zshrcuntuk mendapatkan mode visual agar benar-benar terlihat.
danmcardle
1

Saya punya masalah yang sangat mirip untuk gnome-terminal + tmux + vim tetapi diperluas juga untuk masalah kombinasi kunci spesifik:. Saya harus menggabungkan beberapa hal bersama. pertama-tama saya harus mengatur .tmux.conf saya ke:

# 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

Kemudian di .vimrc:

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

Dan itu berhasil untuk tombol dan latar belakang.

P4C
sumber
1

Jika Anda masih menghadapi masalah: Saya perhatikan bahwa vim kembali menggunakan opsi t_Co=8di dalam tmux bahkan jika $TERMdisetel ke screen-256color. Solusi saya adalah cuplikan ini di vimrc:

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

The $TMUXvariabel hanya diisi jika dalam sesi tmux. Dalam hal ini, saya mengizinkan vim untuk menggunakan 256 warna. Perhatikan bahwa saya juga menghapus termguicolors karena tmux tidak mendukung warna yang sebenarnya.

lgalke
sumber
0

Baru saja menghadapi masalah yang sama. Berdasarkan jawaban bloy dan konten saat ini dari profil ~ /. Saya (sebenarnya, sama dengan winchendonsprings '), saya telah memecahkan masalah saya sebagai berikut:

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

Logika sederhana: jika kita tidak berada di dalam sesi tmux, maka gunakan xterm (berwarna atau tidak). Kalau tidak, hal yang sama untuk layar.

Mungkin terlalu bertele-tele, tetapi Anda punya ide.

evilguc
sumber