เหตุใดสีของ Vim จึงดูแตกต่างกันทั้งภายในและภายนอก tmux?


29

สิ่งแวดล้อม:

  • Fedora 25 (4.9.12-200.fc25.x86_64)
  • เทอร์มินัล GNOME 3.22.1 ใช้ VTE เวอร์ชัน 0.46.1 + GNUTLS
  • VIM - Vi IMproved 8.0 (2016 Sep 12, รวบรวม 22 Feb 2017 16:26:11)
  • tmux 2.2

ฉันเพิ่งเริ่มใช้ tmux และสังเกตว่าสีของ Vim นั้นเปลี่ยนไปตามว่าฉันกำลังวิ่งอยู่ข้างในหรือข้างนอก tmux ด้านล่างเป็นสกรีนช็อตของ Vim ข้างนอก (ซ้าย) และภายใน (ขวา) ของ tmux ขณะดู Git diff:

ป้อนคำอธิบายรูปภาพที่นี่

TERMตัวแปรของฉันคือ

  • ภายนอก tmux: xterm-256color
  • ภายใน tmux: screen-256color

เป็นกลุ่มรายงานประเภทอาคารผู้โดยสารเหล่านี้ตามที่คาดไว้ (ผ่าน:set term?):

  • ภายนอก tmux: term=xterm-256color
  • ภายใน tmux: term=screen-256color

Vim ยังรายงานว่าทั้งสองอินสแตนซ์กำลังทำงานในโหมด 256 สี (ผ่าน:set t_Co?):

  • ภายนอก tmux: t_Co=256
  • ภายใน tmux: t_Co=256

มีคำถามที่คล้ายกันหลายข้อเกี่ยวกับการเรียกใช้ Vim ให้ทำงานในโหมด 256 สีใน tmux (คำตอบที่ดีที่สุดที่ฉันพบคือที่นี่ ) แต่ฉันไม่คิดว่านั่นเป็นปัญหาของฉันตามข้อมูลข้างต้น

ฉันสามารถทำซ้ำปัญหานอก tmux ถ้าฉันเรียกใช้ Vim โดยตั้งค่าประเภทเทอร์มินัลเป็นscreen-256color:

$ TERM=screen-256color vim

เพื่อที่จะทำให้ฉันเชื่อว่ามีเพียงความแตกต่างระหว่างxterm-256colorและscreen-256colorขั้วความสามารถที่ทำให้เกิดความแตกต่างในสี ซึ่งนำไปสู่คำถามที่โพสต์ในชื่อเรื่อง: อะไรเป็นพิเศษในความสามารถของเทอร์มินัลทำให้สี Vim แตกต่างกัน? ฉันเห็นความแตกต่างระหว่างการทำงาน:set termcapภายในและภายนอก tmux แต่ฉันอยากรู้ว่าตัวแปรใดที่ทำให้เกิดความแตกต่างในพฤติกรรม

เป็นอิสระจากคำถามก่อนหน้านี้เป็นไปได้หรือไม่ที่จะให้สี Vim สอดคล้องกันเมื่อทำงานภายในหรือภายนอก tmux? บางสิ่งที่ฉันพยายามรวมถึง:

  • การตั้งค่าเทอร์มินัล tmux เริ่มต้นอย่างชัดเจนใช้ใน~/.tmux.confค่าต่าง ๆ (บางอย่างกับคำแนะนำของคำถามที่พบบ่อยของ tmux ):
    ตั้งค่า -g ขั้วเริ่มต้น "หน้าจอ 256 สี"
    ตั้งค่า -g เริ่มต้นขั้ว "xterm-256color"
    ตั้งค่า -g ขั้วเริ่มต้น "screen.xterm-256color"
    ตั้งค่า -g ขั้วเริ่มต้น "tmux-256color"
  • tmux -2เริ่มต้นใช้ tmux

ในทุกกรณี Vim ยังคงแสดงสีที่แตกต่างภายใน tmux


คุณช่วยกรุณาเริ่มต้นเริ่มscriptต้นvimออกvimแล้วออกจากscriptเปลือกของและแนบtypescriptไฟล์ผลลัพธ์ได้หรือไม่ จากนั้นทำซ้ำขั้นตอนเดียวกันด้วยTERM=screen-256color vimแทน
egmont

@egmont นี่คุณไป: typescript-xterm-256colorและtypescript จอ-256color
Rusty Shackleford

1
ฉันสามารถดู 256 สีลำดับหนีในxterm-256colorรุ่น (ค้นหา "38; 5;" ในแฟ้ม) screen-256colorแต่ไม่สามารถใน เช่นที่ใดก็ตามที่มี\e[38;5;81mในxterm-256color(สี # 81 ของจานสี 256 สี, สีฟ้ากลาง), screen-256colorมี\e[34mแทน (สีฟ้ามาตรฐานของจานสี 8 สี) ดังนั้นคำถามที่สำคัญคือทำไมเป็นกลุ่มไม่ใช้จาน 256 TERM=screen-256colorสีในกรณีของ
egmont

สิ่งที่น่าสนใจอีกอย่างก็คือxterm-256colorรุ่นดูเหมือนจะพิมพ์หน้าจอสองครั้งครั้งแรกด้วยสีแบบดั้งเดิมและจากนั้นด้วยจานสี 256 สี ค้นหาเช่น "F1" ในแฟ้มที่คุณจะพบสองแมตช์ในxterm-256colorครั้งแรกที่มีสีที่สองด้วย\e[34m \e[38;5;81mฉันไม่รู้ว่าเกิดอะไรขึ้นที่นี่
egmont

เพิ่มset -g default-terminal "screen.xterm-256color"ใน~/.tmux.confและโหลดการตั้งค่าใน tmux (<Cs>: แหล่งที่มาของไฟล์ ~ / .tmux.conf) ทำงานให้ฉัน (ฉบับที่ไฮไลท์) ขอบคุณ
dtrckd

คำตอบ:


16

tmuxไม่รองรับความสามารถ terminfo bce(ลบสีด้านหลัง) ซึ่งvimตรวจสอบเพื่อตัดสินใจว่าจะใช้รูปแบบ "สีเริ่มต้น" หรือไม่

ลักษณะtmuxดังกล่าวได้ถูกกล่าวถึงสองสามครั้ง -


คำตอบที่ตรงตามความต้องการของฉันอย่างที่ฉันต้องการ ขอขอบคุณ!
Rusty Shackleford

17

ฉันมีปัญหาที่คล้ายกันก่อน ความคิดเห็นในสีน้ำเงินใน Vim นั้นอ่านยาก ใน.tmux.confชุดนี้ฉัน:

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

และใน.vimrc:

set background=dark

ตอนนี้มันมีลักษณะดังต่อไปนี้และใช้งานได้ทั้งใน Gnome Terminal และ Cygwin: ป้อนคำอธิบายรูปภาพที่นี่


3
วิธีนี้แก้ไขได้สำหรับฉัน ด้วยเหตุผลบางอย่างภายใน tmux กลุ่มที่ไม่ได้ตรวจพบพื้นหลังสีเข้ม การตั้งค่าbg=darkvimrc ของฉันอย่างชัดเจนแก้ไขได้
อดัมคีแนน

แปลก - $TERMทั้งภายในและภายนอกของฉันtmuxเป็นสิ่งที่"xterm-256color"ชัดเจนและทำให้แบ็คounตั้งค่าให้ฉันด้วยเช่นกัน ขอขอบคุณ!
nronnei

ทำงานให้ฉันด้วย ฉันคิดว่าปัญหาเกิดขึ้นsttermเพราะในxfce4-terminalทุกสิ่งดูสบาย ๆ (ความคิดเห็นปรากฏในcyanแทนที่จะblueเป็นเรื่องยากมากที่จะอ่านด้วยพื้นหลังสีเข้ม) หลังจากการเปลี่ยนแปลงนี้ทุกอย่างทำงานได้ดี แต่อย่าลืมที่จะเพิ่มunlet! skip_defaults_vim source $VIMRUNTIME/defaults.vimไปยังไฟล์ vimrc ใช้เน้นไวยากรณ์ ฯลฯ ...
Abinash Dash

2

ขอบคุณการวิเคราะห์ของ @ egmont เกี่ยวกับสีที่ Vim แสดงผลเมื่อใดTERM=screen-256colorฉันจึงได้รับแรงบันดาลใจในการดูรูปแบบสีที่ Vim ใช้ในสองสถานการณ์

Vim รายงานว่ากำลังใช้defaultชุดรูปแบบสีทั้งสองกรณี ฉันคิดว่าแปลกเพราะdefaultรูปแบบสีใน Fedora 25 ( /usr/share/vim/vim80/colors/default.vim) ไม่ตรงกับสีที่ฉันเห็นเมื่อTERM=xterm-256colorใด หากฉันตั้งค่าแบบแผนสีอย่างชัดเจนโดยใช้:colorscheme defaultเมื่อTERM=xterm-256colorลักษณะของ Vim เปลี่ยนไปเมื่อTERM=screen-256colorนั้น เพื่อให้สีกลับมาเหมือนเดิมเมื่อฉันเริ่ม Vim ครั้งแรกฉันต้องใช้ronชุดรูปแบบสี ความคืบหน้า!

ฉันพบคำตอบ Ask Ubuntu ที่แนะนำว่าเมื่อ Vim รายงานว่ากำลังใช้defaultชุดรูปแบบสีไม่จำเป็นต้องหมายถึงdefault.vimแต่เป็นชุดรูปแบบสีเฉพาะชุดรูปแบบบางอย่าง เป็นคำตอบที่ชี้ให้เห็นชุดรูปแบบสีเข้ม (ซึ่งฉันใช้) สอดคล้องกับronโทนสีเช่นเดียวกับที่ฉันค้นพบข้างต้น (แม้ว่าโพสต์นี้จะเกี่ยวกับ Ubuntu แต่ฉันถือว่า OP ใช้ GNOME อยู่)

ฉันยังพบคำถามอื่นที่ดูเหมือนจะอธิบายปัญหาเดียวกันกับที่ฉันมี ฉันเจอมันในขณะที่ค้นหาก่อนที่ฉันจะโพสต์คำถามนี้ แต่ด้วยเหตุผลบางอย่างโทนสีไม่ได้ทำให้ฉันมีความเกี่ยวข้อง

ฉันลงเอยทำสิ่งที่ @LapshinDmitry ทำในคำตอบของเขาและตั้งไว้อย่างชัดเจนcolorscheme ronใน~/.vimrcไฟล์ของฉัน ตอนนี้ไม่ว่าฉันจะเริ่มเป็นกลุ่มภายในหรือภายนอก tmux สีก็จะเหมือนกัน ข้อเสียเปรียบเพียงอย่างเดียวคือถ้าฉันเปลี่ยนธีมเดสก์ท็อปของฉันจากรสชาติที่มืดไปเป็นรสชาติเบา Vim จะไม่เปลี่ยนเป็นชุดรูปแบบสีของชุดรูปแบบ "เริ่มต้น" ซึ่งเห็นได้ชัดpeachpuffโดยอัตโนมัติ ฉันสามารถอยู่กับสิ่งนั้นได้เพราะฉันไม่น่าจะเปลี่ยนธีมของฉัน

ฉันจะไม่ยอมรับคำตอบนี้เพราะฉันพิจารณาตั้งค่าโทนสีอย่างชัดเจนใน~/.vimrcการแก้ปัญหาแทนที่จะเป็นวิธีแก้ปัญหา หากใครบางคนสามารถอธิบายได้ว่าทำไม Vim โหลดชุดสี "ค่าเริ่มต้น" ที่แตกต่างกันขึ้นอยู่กับมูลค่าของTERMฉันยินดีที่จะยอมรับคำตอบนั้นเนื่องจากฉันสนใจที่จะเข้าใจสาเหตุของปัญหามากขึ้น ฉันสงสัยว่ามันเกี่ยวข้องกับวิธีที่ Vim ตีความความสามารถของเทอร์มินัลระหว่างสองไฟล์ terminfo


ฉันยังสงสัยว่าทำไมvimทำเช่นนี้ ท้ายที่สุดbceความสามารถไม่ควรเกี่ยวข้องกับจำนวนสีที่มี
egmont

@egmont ฉันตีความคำตอบของ @ ThomasDickey เป็น: 1) Vim ตรวจสอบbceความสามารถของเครื่องปลายทาง 2) ถ้ามีให้เลือกชุดรูปแบบสี "A" 3) มิฉะนั้นเลือกชุดรูปแบบสี "B" ฉันเชื่อว่าความลึกของสีจะเหมือนกันในทั้งสองกรณี (เช่น 256 สีตามที่t_Coแสดง) เป็นเพียงชุดรูปแบบสี "B" ที่เกิดขึ้นกับระบบของฉันใช้เฉพาะจานสี 8 สีแม้ว่าจะเป็นไปได้ 256 สี(ฉันคิดว่าจะอธิบายสิ่งที่คุณสังเกตเห็นในการวิเคราะห์แบบอักษรของคุณโปรดแก้ไขฉันหากฉันผิด) โปรดจำไว้ว่าหลังจากที่ฉันเรียกใช้:colorscheme ronฉันเห็นลำดับการหลบหลีก 256 สีในเซสชัน Vim เดียวกัน
Rusty Shackleford

ขอบคุณสำหรับคำอธิบาย - ฉันยังไม่เห็นเหตุผลใด ๆ ที่อยู่เบื้องหลังสิ่งนี้ ไม่เป็นไร. vimมีการออกแบบที่แปลกมาก
egmont

0

ตัวแปร TERM ของฉันคือ Outside tmux: xterm-256color Inside tmux: screen-256color

ถูกต้องและทำงานให้ฉัน ลองใช้เทอร์มินัลอื่น (ฉันใช้ urxvt) เพื่อดูว่า Gnome Terminal เป็นปัญหาหรือไม่ 

นอกจากนี้ตรวจสอบCOLORTERM(เหมืองถูกตั้งค่าrxvt) unset TERMCAPและ


ขอบคุณสำหรับคำแนะนำ ฉันวิ่งทดสอบเดียวกันกับ urxvt (ด้านนอกTERM คือrxvt-unicode-256color) โดยใช้ที่เหมาะสม~/.Xdefaultsและน่าเสียดายที่ยังคงสังเกตเห็นสีที่แตกต่างทั้งภายในและภายนอก tmux สำหรับสถานการณ์จำลอง gnome-terminal COLORTERMคือtruecolorและTERMCAPว่างเปล่าทั้งภายในและภายนอก tmux สำหรับสถานการณ์จำลอง urxvt COLORTERMอยู่rxvt-xpmภายนอกและtruecolorภายใน tmux ขณะที่TERMCAPว่างเปล่าทั้งภายในและภายนอก tmux
Rusty Shackleford

@ RustyShackleford นี่สำหรับ Vim เท่านั้น? คุณใช้ 'termguicolors' หรือไม่? ดู:help xterm-true-colorหรือลองใช้การกำหนดค่า Vim เริ่มต้นเพิ่มเติม
laktak

ฉันเพิ่งสังเกตเห็นปัญหาใน Vim จนถึงตอนนี้ (อย่างที่ฉันพูดฉันเพิ่งเริ่มใช้ tmux) ตัวอย่างเช่นเทอร์มินัลพรอมต์และเอาต์พุต Git CLI ของฉันดูเหมือนจะมีสีเดียวกันทั้งภายในและภายนอกของ tmux ฉันไม่ได้ตั้งค่าtermguicolorsใน.vimrcและ:set termguicolors?รายงานของฉันnotermguicolorsในทั้งสองกรณี ฉันจะดูหัวข้อความช่วยเหลือที่คุณอ้างอิง ขอบคุณ!
Rusty Shackleford

0

สำหรับการอ้างอิงของฉันเองในภายหลังเมื่อฉันสงสัย google ตั้งค่าเครื่องต่อไปของฉัน

  • Vim8 / Neovim
  • Windows 10
  • Git ทุบตี
  • Tmux 2.7

ใช้คำแนะนำเหล่านี้เพื่อรับไบนารีและ DLL ที่จำเป็นใน PATH ของ Git bash:

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

ใช้คำสั่งเหล่านี้เพื่อกำหนดค่า:

echo 'set -g default-terminal "screen.xterm-256color"' > ~/.tmux.conf
tmux -2u
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.