รองรับ 256 สีสำหรับพื้นหลังเป็นกลุ่มใน tmux


98

ในขณะที่ใช้ vim ใน tmux ฉันสามารถเห็นได้ว่าเปิดใช้งานรองรับ 256 สีแล้ว ด้วยสี $ tput

อย่างไรก็ตามการเปลี่ยน colorscheme ในกลุ่มในขณะที่อยู่ใน tmux จะเปลี่ยน colourscheme บนพื้นฐานต่อบรรทัด แต่ไม่ใช่พื้นหลังทั้งหมด ดูภาพหน้าจอป้อนคำอธิบายรูปภาพที่นี่

นี่คือตัวอย่างของไฟล์. vimrc ของฉัน colorcheme ดั้งเดิมของฉันคือแสงอาทิตย์มืดแล้วหลังจากทำงาน: colorscheme molokai คุณเห็นว่าเกิดอะไรขึ้น

ข้อมูล

  • คำพังเพยขั้ว
  • ทุบตี

ใน ~ / .tmux.conf ของฉัน

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

ใน ~ / .vimrc ของฉัน

    set t_Co=256

ใน ~ / .bashrc ของฉัน

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

ใน ~ / .profile ของฉัน

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

ความคิดใดที่ฉันจะเปลี่ยน colorcheme เต็มรูปแบบในกลุ่ม? ตัวอย่างของฉันทั้งหมดจากไฟล์ดูดีหรือไม่?


จะเกิดอะไรขึ้นถ้าคุณกด control-l ในโหมดปกติหรือรันคำสั่ง ": redraw"
Heptite

@Heptite ไม่มีอะไรเกิดขึ้นยังคงมีการเปลี่ยนแปลงสีตามบรรทัดเหมือนในภาพหน้าจอ
winchendonsprings

คำตอบ:


75

จากรูปลักษณ์ของ. bashrc และ. profile เปลือกหอยภายใน tmux จะแทนที่การตั้งค่า 'default-terminal' ใน tmux conf ของคุณ บางสิ่งเช่นนี้

  • tmux สร้างเชลล์ใหม่ด้วย TERM=screen-256color
  • .bashrc / .profile run ตั้ง TERM=xterm-256color
  • เป็นกลุ่ม, พยายามใช้ TERM ไม่ถูกต้องสำหรับ tmux

คุณสามารถตรวจสอบสิ่งนี้ได้ด้วยการวิ่ง

echo $TERM

ในเชลล์ tmux สด

Tmux ค่อนข้างจู้จี้จุกจิกเกี่ยวกับการตั้งค่าขั้วได้อย่างถูกต้อง หากคุณสามารถทำได้ให้ตั้งค่า term ในการกำหนดค่าของ gnome-terminal ไม่ใช่ใน. bashrc ของคุณ ความล้มเหลวนั้นล้อมรอบการตั้งค่าเหล่านั้นด้วยการตรวจสอบ "หน้าจอ" หรือ "screen-256color" TERM และไม่รีเซ็ตในกรณีนั้น

Tmux ต้องการให้เทอร์มินัลตั้งค่าเป็นscreenหรือscreen-256color


5
ดีที่คุณแก้ไขมัน ฉันเพียงแค่แสดงความคิดเห็นอะไรใน. bashrc ของฉันและไฟล์. profile ของฉันที่เกี่ยวข้องกับการตั้งค่าสีเป็น 256 เริ่มต้น tmux และ vim เริ่มทำงานกับพื้นหลังที่เหมาะสมและเปิดใช้งาน 256 สี คุณสามารถบอกฉันได้ว่าไฟล์กำหนดค่า gnome-terminal นั้นอยู่ที่ไหน นอกจากนี้เมื่อคุณบอกว่า tmux ต้องการตั้งค่าเทอร์มินัลเป็น 'scfeen-256color คุณหมายถึงว่าฉันมีมันใน tmux.conf หรือไม่? ขอบคุณ
winchendonsprings

ฉันไม่มีเครื่องที่มี gnome-terminal ที่สะดวกในการตรวจสอบ แต่การตั้งค่าควรอยู่ใน GUI ซึ่งอาจอยู่ภายใต้ 'การตั้งค่าโปรไฟล์' หรืออะไรทำนองนั้น
bloy

5
นอกจากนี้ใช่ให้ tmux ทำสิ่งของตัวเองกับเปลือกหอยที่วางไข่ ปล่อยให้set -g default-terminal "screen-256color"บรรทัดใน conf ของ tmux ของคุณ
bloy

2
ทั้งหมดข้างต้นคือสิ่งที่ฉันเป็นหลังจากนั้น (ตรวจสอบให้แน่ใจว่าตั้งค่าระยะเวลาถูกต้องและไม่แทนที่ใน tmux) และจากนั้นฉันต้องใช้ 'tmux -2' เพื่อโหลด tmux ขึ้น
phantomwhale

ลองใช้if [[ $TERM == xterm ]]; then TERM=xterm-256color; fiงานได้สำหรับฉัน
ไม่สมมาตร

59

ตามที่อธิบายไว้ที่นี่ปิดการใช้งานลบสีพื้นหลัง (BCE) โดยการล้างt_utตัวเลือกเทอร์มินัล (เรียกใช้:set t_ut=ใน Vim แล้วกดControl+ Lเพื่อรีเฟรชจอแสดงผลของเครื่องเทอร์มินัล) เพื่อให้โครงร่างสีทำงานอย่างถูกต้อง


7
นี่เป็นสิ่งเดียวที่ในที่สุดก็ทำงานให้ฉัน!
Oz123

3
ฉันสิ้นสุดการเพิ่มset t_ut=vimrc ซึ่งไม่จำเป็นต้องใช้คำสั่งด้วยตนเองและไม่จำเป็นต้องใช้ <kbd> การควบคุม </kbd> + <kbd> L <kbd> L </kbd> เนื่องจากเซสชันเริ่มต้นด้วยการปิดใช้งาน BCE
erran

นี่เป็นสิ่งสำคัญเมื่อใช้ PuTTY ชุดค่าผสมทั้งหมดจะสั้นเมื่อชุดสีมีพื้นหลัง นอกจากนี้ที่ดีในการด้าย
botimer

วิธีนี้ใช้ได้ผลอย่างไรก็ตามเมื่อโซลูชันนี้ใช้การคัดลอกและวางด้วยเมาส์ก็จะคัดลอกและวางเส้นลากเว้นวรรค (หากมีการเน้นไว้)
ขนม้า

17

ฉันพบวิธีที่ดีกว่าในโพสต์นี้ คุณสามารถสร้างนามแฝงของ tmux tmux -2ซึ่งจะบังคับให้ tmux สันนิษฐานว่าเชลล์ใช้ 256 เทอร์มินัลสี


4

นี่คือสิ่งที่ใช้ได้กับฉันใน #Ubuntu และ #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

โหลดการตั้งค่าใหม่:

$ source ~ / .bashrc # Ubuntu

$ source ~ / .bash_profile # Mac

ตั้งค่า. bashrc สำหรับ Mac (ตามที่ใช้โดย tmux)

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

ตั้งค่าตัวเลือก "default-terminal" ใน ~ / .tmux.conf

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

1

การแก้ไขอย่างรวดเร็วคือการเรียกใช้สิ่งต่อไปนี้ในเทอร์มินัล

export TERM=xterm-color

คุณสามารถเพิ่มลงใน~/.bash_profileโปรไฟล์ของคุณหรืออื่น ๆ เพื่อตั้งค่าเสมอเริ่มต้น


ขอบคุณ! นี่คือทั้งหมดที่ฉันต้องเพิ่มในของฉัน.zshrcเพื่อให้ได้โหมดภาพที่มองเห็นได้จริง
danmcardle

1

ฉันมีปัญหาที่คล้ายกันมากสำหรับ gnome-terminal + tmux + vim แต่มันก็ขยายไปถึงปัญหาการรวมคีย์เฉพาะ: ฉันต้องรวมบางสิ่งเข้าด้วยกัน ก่อนอื่นฉันต้องตั้งค่า. tmux.conf เป็น:

# 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

จากนั้นใน. vrrc:

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

และนั่นก็ทำงานสำหรับคีย์และพื้นหลัง


1

หากคุณยังคงเผชิญปัญหา: ผมสังเกตเห็นว่าเป็นกลุ่มที่ตกกลับไปใช้ตัวเลือกt_Co=8ภายใน tmux แม้ว่ามีการตั้งค่า$TERM screen-256colorวิธีแก้ปัญหาของฉันคือตัวอย่างนี้ใน vimrc:

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

$TMUXตัวแปรเต็มไปเท่านั้นหากภายในเซสชั่น tmux ในกรณีนี้ฉันอนุญาตให้กลุ่มใช้ 256 สี โปรดทราบว่าฉันยังยกเลิกการตั้ง termguicolors เนื่องจาก tmux ไม่สนับสนุนสีจริง


0

เพิ่งประสบปัญหาเดียวกัน ตามคำตอบของbloyและเนื้อหาปัจจุบันของ ~ / .profileของฉัน (อันที่จริงมันเหมือนกับwinchendonsprings ') ฉันได้แก้ไขปัญหาของฉันดังนี้:

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

ลอจิกง่าย: ถ้าเราไม่ได้อยู่ในเซสชั่น tmux ให้ใช้ xterm (มีสีหรือไม่) มิฉะนั้นสิ่งเดียวกันสำหรับหน้าจอ

บางทีมันอาจจะละเอียดเกินไป แต่คุณมีความคิด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.