Vim renkleri neden tmux'un içinde ve dışında farklı görünüyor?


29

Çevre:

  • Fedora 25 (4.9.12-200.fc25.x86_64)
  • GNOME Terminal 3.22.1 VTE sürüm 0.46.1 + GNUTLS kullanımı
  • VIM - Vi IMproved 8.0 (2016 Eyl 12, derlendi 22 Şub 2017 16:26:11)
  • tmux 2.2

Kısa süre önce tmux kullanmaya başladım ve Vim içindeki renklerin tmux'un içinde mi yoksa dışında mı olduğuna bağlı olarak değiştiğini gözlemledim. Git farkını izlerken Vim'in dışındaki (soldaki) ve içindeki (sağdaki) Vim ekran görüntüleri aşağıdadır:

görüntü tanımını buraya girin

Benim TERMdeğişken

  • Dış tmux: xterm-256color
  • Tmux içinde: screen-256color

Vim, bu terminal tiplerini beklendiği gibi bildirir (yoluyla :set term?):

  • Dış tmux: term=xterm-256color
  • Tmux içinde: term=screen-256color

Vim ayrıca her iki örneğin de 256 renkli modda çalıştığını bildirir (üzerinden :set t_Co?):

  • Dış tmux: t_Co=256
  • Tmux içinde: t_Co=256

Vim'i tmux içinde 256 renkli modda çalıştırmaya ilişkin benzer birçok soru var (bulduğum en iyi cevap burada ), ancak yukarıdaki bilgileri verdiğimde bunun benim sorunum olduğunu sanmıyorum.

Uçbirim tipine ayarlanmış Vim ile çalıştırırsam, sorunu tmux dışında kopyalayabilirim screen-256color:

$ TERM=screen-256color vim

Bu da beni renk farkına neden olan xterm-256colorve screen-256colorterminal yetenekleri arasında bir miktar fark olduğuna inandırıyor . Başlıkta sorulan soruya hangisi yol açar: Vim renklerinin farklılık göstermesine neden olacak uçbirim özelliklerinde özellikle ne var? :set termcapTmux’un içinde ve dışında koşmak arasındaki farkları görüyorum , ancak davranışlarda hangi değişkenlerin gerçekten de farklılığa neden olduğunu merak ediyorum.

Bir önceki sorudan bağımsız olarak, tmux'un içinde veya dışında çalışırken Vim renklerinin tutarlı olması mümkün müdür? Denediğim bazı şeyler:

  • Tmux terminalinin kullandığı varsayılan değeri açık bir ~/.tmux.confşekilde çeşitli değerlere ayarlamak (bazıları tmux SSS’nin tavsiyesine karşı ):
    -g default-terminal "screen-256color" olarak ayarla
    -g varsayılan terminalini "xterm-256color" olarak ayarla
    -g default-terminal değerini "screen.xterm-256color"
    -g varsayılan terminalini "tmux-256color" olarak ayarla
  • Kullanarak tmux'u başlatın tmux -2.

Her durumda Vim, tmux'un içinde farklı renkler göstermeye devam etti.


Lütfen başlar script, başlatır vim, çıkar vimve sonra scriptkabuğundan çıkar ve ortaya çıkan typescriptdosyayı ekler misiniz? Sonra aynı adımları bununla tekrarlayın TERM=screen-256color vim.
egmont


1
Sürümde 256 renkli kaçış dizileri görebiliyorum xterm-256color(dosyada "38; 5;" için arama yapın), ancak screen-256color. Bir var yerde Örneğin \e[38;5;81miçinde xterm-256color(renk 256 renk paletinin 81., bir orta mavi ton), screen-256colorihtiva \e[34myerine (8-renk paletinin standart mavi). Öyleyse asıl soru, neden vim'in 256 renkli paleti kullanmadığıdır TERM=screen-256color.
egmont

Bir başka ilginç şey, xterm-256colorsürümün önce eski renklerle, sonra da 256 renk paletiyle ekranı iki kez yazdırması gibi görünüyor. Örneğin, dosyada "F1" aratın, içinde iki renkli, xterm-256colorilki \e[34mrenkli, ikincisi ile eşleşir \e[38;5;81m. Burada neler oluyor bilmiyorum.
egmont

Ekleme set -g default-terminal "screen.xterm-256color"içinde ~/.tmux.conftmux config ve yeniden: ben (vurgulamak sorunu) için çalışmış (<Cs> kaynak-dosya ~ / .tmux.conf). thx
dtrckd

Yanıtlar:



17

Daha önce de benzer sorunu yaşadım. Vim'deki mavi renkli yorumları okumak zordu. Gelen .tmux.confbu ayarlayın:

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

Ve içinde .vimrc:

set background=dark

Şimdi Gnome Terminalinde ve Cygwin'de şöyle görünüyor ve çalışıyor: görüntü tanımını buraya girin


3
Bu benim için çözdü. Nedense, smokin içinde vim karanlık bir arka plan tespit etmiyordu. Açıkça bg=darkbenim vimrc ayarım düzeltildi.
Adam Keenan

Garip - benim $TERMgerek içinde gerekse dışında tmuxidi "xterm-256color"ve açıkça backgroun benim için de yaptım ayarı. Teşekkür ederim!
nronnei

Benim için de çalıştım. Sorunun birlikte olduğunu düşündüm, sttermçünkü xfce4-terminalher şeyde rahat görünüyordu ( cyanbunun yerine görünen yorumları bluekoyu arka planla okumak çok zor). Bu değişiklikten sonra her şey iyi çalışıyor. Ama unlet! skip_defaults_vim source $VIMRUNTIME/defaults.vimsözdizimi vurgulama vb kullanmak için vimrc dosyasına eklemek unutmayın ...
Abinash Dash

2

@ Egmont'un Vim'in ne renk çıkardığı üzerine yaptığı analiz sayesinde TERM=screen-256color, iki senaryoda Vim'in kullandığı renk şemasına bakmak için ilham aldım.

Vim default, her iki durumda da renk şemasını kullandığını bildirmiştir . Tuhaf olduğunu düşündüm çünkü defaultFedora 25 ( /usr/share/vim/vim80/colors/default.vim) ' deki renk şeması aslında ne zaman gördüğüm renklerle uyuşmuyor TERM=xterm-256color. Renk düzenini :colorscheme defaultne zaman TERM=xterm-256colorkullanacağımı açıkça ayarlarsam , Vim'in görünümü ne zaman buna göre değişir TERM=screen-256color. Renkleri Vim'e ilk başladığımda olduklarına geri döndürmek için ronrenk şemasını kullanmak zorunda kaldım . İlerleme!

Vim'in renk şemasını kullandığını bildirdiğinde , bunun mutlaka bir anlam ifade etmiyor, bunun yerine temaya özgü bir renk şeması olduğunu düşünen bir Ubuntu sor yanıtı buldum . Cevabın işaret ettiği gibi (kullanıyorum) koyu bir tema , yukarıda keşfettiğim gibi , renk şemasına tekabül ediyor . (Bu yazının Ubuntu ile ilgili olmasına rağmen, OP'nin GNOME kullandığını farz ediyorum.)defaultdefault.vimron

Ayrıca yaşadığım aynı problemi tarif eden başka bir soru da buldum . Bu soruyu göndermeden önce araştırırken rastladım, ancak bazı nedenlerden dolayı renk şeması bana alakalı değildi.

Ben @LapshinDmitry onun cevabını yaptı ve açıkça ayarlanmış yapıyor sona erdi colorscheme ronbenim de ~/.vimrcdosyaya. Şimdi, Vim'i tuxun içinde veya dışında başlatsam da renkler aynı görünüyor. Tek dezavantajı, masaüstü temamı karanlık bir aromadan hafif bir aroma değiştirdiğimde, Vim otomatik olarak "varsayılan" ışık teması renk düzenine geçmeyecek peachpuff. Onunla yaşayabilirim, çünkü temamı hiç değiştirmedim.

Bu cevabı kabul etmeyeceğim çünkü renk şemasını açıkça ~/.vimrcçözümden ziyade geçici bir çözümde ayarlamayı düşünüyorum . Birisi neden Vim'in değerine bağlı olarak farklı bir "varsayılan" renk şeması yüklediğini açıklayabilirse, nedenini TERManlamakla daha fazla ilgilendiğim için bu cevabı kabul etmekten memnuniyet duyarım. Vim'in iki terminfo dosyası arasındaki uçbirim özelliklerini nasıl yorumladığı ile ilgili olduğunu düşünüyorum.


Ayrıca neden vimbu şekilde davrandığını da merak ediyorum . Sonuçta, bcekabiliyetin mevcut renk sayısıyla ilgisi olmamalıdır.
egmont

@ egmont @ ThomasDickey'in cevabını şu şekilde yorumladım: 1) Vim bce, terminalin kapasitesini kontrol eder , 2) varsa, "A" renk şemasını seçin, 3) aksi takdirde, "B" renk şemasını seçin. Renk derinliğinin her iki durumda da aynı olduğuna inanıyorum (örn t_Co. Gösterildiği gibi 256 renk ). Benim sistemde renk düzeni "B" sadece 256 renk olmasına rağmen 8 renk paleti kullanmak olur sadece var mümkün (ben düşünüyorum ; yanılıyorsam beni düzeltin lütfen bu size typescript analizinde gözlenen şeyi açıklıyor). Unutma, :colorscheme ronkoştuktan sonra, aynı Vim oturumunda 256 renkli kaçış dizileri görüyorum.
Rusty Shackleford

Açıklama için teşekkürler - Yine de bunun arkasındaki mantığı göremiyorum. Boşver. vimGerçekten çok garip tasarım kararları var.
egmont

0

TERM değişkenim Dışında tmux: xterm-256color İçinde tmux: screen-256color

Bu doğru ve benim için çalışıyor. Gnome Terminalinin sorun olup olmadığını görmek için farklı bir terminalle (urxvt kullanıyorum) deneyin. 

Ayrıca kontrol edin COLORTERM(benimki ayarlandı rxvt) ve unset TERMCAP.


Önerileriniz için teşekkürler. I (dış urxvt ile aynı test ran TERM olan rxvt-unicode-256color, uygun kullanılarak) ~/.Xdefaultsve ne yazık ki yine iç ve tmux dışında farklı renkler görülmektedir. Gnome-terminal senaryo için, COLORTERMolduğu truecolorve TERMCAPiç ve dış tmux hem boş. Urxvt senaryosu için, COLORTERMbir rxvt-xpmdış ve truecolorsüre içinde tmux TERMCAPiçini ve dış tmux hem boş olduğunu.
Rusty Shackleford

@RustyShackleford bu sadece Vim için mi? Termguicolors kullanıyor musunuz? Bir göz atın :help xterm-true-colorveya daha varsayılan bir Vim config ile deneyin.
laktak

Sadece Vim'deki sorunu farkettim (dediğim gibi, yakın zamanda tmux kullanmaya başladım). Örneğin, terminal istemim ve Git CLI çıktısı, tmux’un içinde ve dışında aynı renklere sahip görünüyor. Ben set yok termguicolorsbenim içinde .vimrcve :set termguicolors?raporların notermguicolorsher iki durumda da. Başvurduğunuz yardım konusuna bakacağım; Teşekkürler!
Rusty Shackleford

0

Kendi referansım için daha sonra hiç şüphesiz ki bu makineyi kurarken google.

  • Vim8 / Neovim
  • Windows 10
  • Git bash
  • Tmux 2.7

Gerekli ikili dosyaları ve DLL dosyalarını Git bash'in PATH'sine almak için bu yönergeleri kullanın:

https://blog.pjsen.eu/?p=440

Yapılandırmak için bu komutları kullanın:

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.