zsh: tmux में TERM = screen-256color सेट करें, लेकिन xterm-256color बिना tmux के


18

मुझे tmux के बाहर $TERMहोने की आवश्यकता है xterm-256color(zsh के साथ "सादे" टर्मिनल में), लेकिन screen-256colortmux के अंदर।

पहले मैंने कोशिश की:

  • जोड़ने export TERM='xterm-256color'मेरी को ~/.zshrc
  • set -g default-terminal "screen-256color"मेरे लिए जोड़ें~/.tmux.conf

अब, जब मैं टर्मिनल खोलता हूं (कहते हैं, xterm), TERMहै xterm-256color, जो सही है। लेकिन जब मैं tmux चलाती हूँ, TERMफिर से xterm-256color!

फिर मैंने अपनी लाइन में टिप्पणी करने की कोशिश की ~/.zshrc। अब, जब मैं टर्मिनल खोलता हूं, तब TERMहै xterm, और जब मैं tmux चलाता हूं, TERMहै screen-256color। यह अगर मैं सेट लगता है तो TERMमें .zshrcसेट, tmux सबसे पहले TERMकरने के लिए screen-256color, रन शैल (जो zsh है), और zsh पढ़ता है .zshrcऔर फिर सेट करता है TERMके लिए xterm-256color

तो, कैसे बनाने के लिए TERMहोने के लिए xterm-256color"सादे" टर्मिनल में, और screen-256colortmux में?


5
Xterm कॉन्फ़िगरेशन (X संसाधन) में xterm के लिए TERM सेट करें और tmux कॉन्फ़िगरेशन में tmux के लिए। वहाँ कोई कारण नहीं है कि आप किसी भी zsh में करना चाहिए।
स्टीफन चेज़लस

हम्म, लेकिन मैं अन्य टर्मिनल एमुलेटर का भी उपयोग करता हूं: कहते हैं, गनोम-टर्मिनल और क्वेक-स्टाइल ड्रॉप-डाउन कंसोल "अल्टियो" github.com/linvinus/AltYo , अभी भी TERMइन टर्मिनलों में सही सेट करने का तरीका नहीं ढूंढ सकता है
दिमित्री फ्रैंक

1
वैसे वे एप्लिकेशन अपने TERM को ठीक से सेट करने के लिए जिम्मेदार हैं । के लिए gnome-terminal, यह शायद होना चाहिए gnome-256color... तो यह उन अनुप्रयोगों को ठीक से कॉन्फ़िगर करने की आवश्यकता है, नहीं zsh। कारण यह है कि वे xtermमशीनों का उपयोग करते समय समस्याओं से बचने के लिए संभवत: अधिक विशिष्ट टर्मिनफो प्रविष्टियां नहीं करते हैं। यदि आप जानते हैं कि आप केवल एग्ज़ॉस्ट टर्म टर्मिनल के साथ मशीनों के लिए sshing कर रहे हैं, तो आप स्वयं अनुप्रयोगों में इसे बदल सकते हैं।
स्टीफन चेज़लस

और अगर आपको एक .zshrc कीचड़, IMO जोड़ने की आवश्यकता है, जो उन मशीनों पर होनी चाहिए जिनके पास अपूर्ण टर्मो डेटाबेस हैं (xterm-256color को बदलने के लिए xtermयदि xterm-256color s समर्थित नहीं हैं, हालांकि यह उन प्रविष्टियों को हमारे में जोड़ना बेहतर होगा खुद ~ / .terminfo डेटाबेस)।
स्टीफन चेजलस

हमें टर्मिनल एमुलेटर में टर्म सेट करना चाहिए, अंदर नहीं .zshrc। यह सही तरीका नहीं है।
जेडो

जवाबों:


24

TERM पर्यावरण चर को आपके टर्मिनल के रूप में कार्य करने वाले एप्लिकेशन द्वारा सेट किया जाना चाहिए। यह पूरी बात है: उनके अंदर चल रहे कार्यक्रमों को यह बताना कि टर्मिनल का क्या उपयोग किया जा रहा है और इसलिए यह किस प्रकार की सुविधाओं का समर्थन करता है।

Zsh एक टर्मिनल नहीं है। यह एक खोल है। यह ध्यान दे सकता है कि आपका TERM सेट है यदि वह विशेष चीजें करना चाहता है, लेकिन इसे स्थापित करने के लिए जिम्मेदार नहीं होना चाहिए । इसके बजाय यह ZSH_VERSION जैसे वैरिएबल को सेट करने के लिए ज़िम्मेदार है, जिसका उपयोग स्क्रिप्ट या अन्य बच्चे प्रक्रियाओं द्वारा किया जा सकता है ताकि यह समझ सकें कि उनके मूल शेल से क्या व्यवहार की उम्मीद है।

इसके बजाय, आपको जो भी टर्मिनल एप्लिकेशन का उपयोग कर रहे हैं उसके लिए कॉन्फ़िगरेशन की जांच करने की आवश्यकता है और इसे ठीक से रिपोर्ट करने के लिए कहें। उदाहरण के लिए आप इसे xterm के लिए कर सकते हैं इस लाइन को ~/.Xdefaultsविन्यास मूल्यों के लिए उपयोग की गई फ़ाइल में जोड़कर :

xterm*termName: xterm-256color

ऐसा प्रतीत होता है कि गनोम-टर्मिनल पढ़ने की मुहावरेदार बात करता है कि आपका एक्सटर्म कॉन्फ़िगरेशन क्या है, इसके बजाय यह स्वयं का होगा। यह आपको कुछ मामलों में मिल सकता है, लेकिन अधिक अच्छी तरह से सूक्ति-256color पर सेट किया जाना चाहिए। यह इसके खिलाफ (और कुछ अन्य वीटीई आधारित टर्मिनल एमुलेटरों) के खिलाफ एक लंबे समय तक पकड़ती प्रतीत होती है। इसके चारों ओर हैक करने का एक सामान्य तरीका यह सेट करता है एक और मूल्य का शोषण है:

if [ "$COLORTERM" = "gnome-terminal" ]; then
    export TERM=gnome-256color
fi 

लेकिन यह आपको tmux के साथ आपकी समस्या के आसपास वापस लाता है, इसलिए आपको TERM को रीसेट न करके उस पर ध्यान देना होगा यदि यह पहले से ही "स्क्रीन -255 kcolor" या "स्क्रीन" जैसा कुछ है:

if [ "$COLORTERM" = "gnome-terminal" -a "$TERM" =~ xterm.* ]; then
    export TERM=gnome-256color
fi

अन्य टर्मिनलों के लिए आपको उनके उचित विन्यास रूटीन देखने होंगे।


zshसेटिंग के लिए ज़िम्मेदार नहीं है $SHELLloginइसे सेट करने के लिए ज़िम्मेदार है, और आप इसे किसी और चीज़ में बदलने के लिए ज़िम्मेदार हैं , यदि आप अनुप्रयोगों ( xterm, vi...) को बताना चाहते हैं, तो आपको अपने पसंदीदा शेल के रूप में कौन सा शेल चाहिए। zshसेटिंग $ZSH_VERSIONऔर कुछ विशेष शेल वेरिएबल्स के लिए जिम्मेदार है , लेकिन यह स्पर्श नहीं करता है $SHELL
स्टीफन चेज़लस

@ StéphaneChazelas मेरे लिए मैला था, सुधार के लिए धन्यवाद।
कालेब

इसके लिए धन्यवाद, इसने मुझे यह देखने के लिए तैयार किया कि konsoleTER को मेरे bashrc में डालने के बजाय कैसे सेट किया जाए। यह प्रोफ़ाइल के सामान्य टैब, पर्यावरण, में सेट मिला से इसे बदल xtermकरने के लिएxterm-256color
माइक Lippert

लायक ध्यान देने योग्य बात है कि मेरे वेनिला के तहत deb10 सूक्ति टर्मिनल रिपोर्ट स्थापित truecolorकरने के बजाय gnome-terminalके लिए $COLORTERMऔर इतने ऊपर का पता लगाने तंत्र काम नहीं हो सकता। XTERM इस मान को सेट करने के लिए प्रकट नहीं होता है, यह किसी भी मूल्य के लिए जाँच करने के लिए मान्य हो सकता है। इस अवधि के प्रकार आंशिक रूप से चर्चा की है इस सार में : संभवतः कहीं और gist.github.com/XVilka/8346728#true-color-detection
शॉन विल्सन

8

अपने .zshrc के अंदर, डालें

[[ $TMUX = "" ]] && export TERM="xterm-256color"

और, अपने .tmux.conf के अंदर

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

2
या फिर [[ $TMUX != "" ]] && export TERM="screen-256color" इस तरह zsh अवधि सेट हो जाएगा केवल अगर एक tmux सत्र के भीतर बुलाया
Titou
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.