vim - विम: TM_ के साथ संयोजन के रूप में t_Co=256 और टर्म=xterm-256color के बीच अंतर




terminal tmux (2)

मैं उन विभिन्न विभिन्न टर्मिनलों का परीक्षण कर रहा हूं, जिनका उपयोग मैं एसएसएच को लिनक्स बॉक्स में करने के लिए करता हूं, जिन पर मेरे पास टमक्स सेट है।

मूल रूप से मैंने इस व्यवहार पर ध्यान दिया, और मैं उम्मीद कर रहा हूं कि कोई व्यक्ति इस बात की व्याख्या कर सकता है कि क्या हो रहा है। अब यह मामला हो सकता है कि यह विशिष्ट व्यवहार है जो प्रॉम्प्ट एप्लिकेशन को प्रभावित करता है।

मैं Tmux के भीतर Vim का उपयोग कर रहा हूं, और मेरे iPhone5 पर पैनिक के प्रॉम्प्ट ऐप पर मैं व्यवहार कर रहा था कि 256 रंग सक्षम नहीं थे जब .vimrc set t_Co=256 निर्देश का उपयोग करके रंगों को set t_Co=256 । यहाँ, विम सही ढंग से रंगों का प्रदर्शन कर रहा था जब इसे टमक्स के माध्यम से नहीं चलाया गया था। इसके अलावा, OS X के Terminal.app ने सही तरीके से रंगों का प्रतिपादन किया (मैं दुर्भाग्य से खिड़कियों पर इसके साथ PuTTY का परीक्षण नहीं किया) Tmux में विम के साथ।

फिर मैंने set term=xterm-256color लिए set t_Co=256 को set term=xterm-256color और अब Tmux के माध्यम से Vim का उपयोग करते समय रंग काम करते हैं।

ध्यान दें कि मैंने set -g default-terminal "xterm-256color" दोनों set -g default-terminal "xterm-256color" और set -g default-terminal "screen-256color" सेटिंग्स का परीक्षण किया और इस परिवर्तन का व्यवहार पर कोई प्रभाव नहीं पड़ा।


आप दोनों set t_Co=256 उपयोग कर सकते हैं और एक साथ set term=xterm-256color set t_Co=256 कर सकते हैं।

term विम को बताता है कि किस प्रकार का टर्मिनल उपयोग करना है, जो विम के सभी पहलुओं के प्रदर्शन / प्रतिपादन को नियंत्रित करता है, जिसमें प्रमुख इनपुट को कैसे मैप किया जाए, स्क्रीन को फिर से कैसे करें, कर्सर को स्थानांतरित करें, रंग प्रदर्शित करें, आदि। आम तौर पर, विम इसका पता लगा सकता है। आपके OS द्वारा प्रदान की गई TERM पर्यावरण चर के माध्यम से।

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

t_Co कई टर्मिनल विकल्पों में से एक है (जिसका उपयोग t_Co सिस्टम द्वारा किया जाता है जो विम नियंत्रण के लिए उपयोग करता है)। यह विशेष रूप से उन रंगों की संख्या को संदर्भित करता है जो टर्मिनल समर्थन करता है। यदि टर्मिनल एमुलेशन ज्यादातर सही है, तो कभी-कभी आपको इसे ओवरराइड करने की आवश्यकता होती है, लेकिन विम समर्थित रंगों की संख्या की सही पहचान नहीं कर पाता है।

मैं इन दोनों विकल्पों का उपयोग अपने .vimrc में करता हूं, .vimrc सुनिश्चित करने के लिए कि विम मेरे द्वारा पसंद किए गए सभी टर्मिनलों (उबंटू के गनोम-टर्मिनल, OSX के iTerm2 और Windows के KiTTY) का उपयोग करते हुए tmux में 256 रंगों का उपयोग करता है। मेरे पास अधिकांश टर्मिनल हैं जो स्पष्ट रूप से उनके टर्मिनल प्रकार के रूप में xterm-256color भेजने के लिए कॉन्फ़िगर किए गए हैं।


जब आप tmux या screen उपयोग नहीं करते screen , तो आपको अपने टर्मिनल को अपने टर्मिनलों और प्लेटफार्मों के साथ काम करने वाले xterm-256color या किसी भी तुलनीय मूल्य पर सेट करके "256 रंगों को प्रदर्शित करने में सक्षम" के रूप में स्वयं को विज्ञापित करने के लिए अपने टर्मिनल एमुलेटर को कॉन्फ़िगर करने की आवश्यकता होती है। आप इसे कैसे करते हैं यह टर्मिनल एमुलेटर पर निर्भर करेगा और आपके प्रश्न और इस उत्तर के दायरे से बाहर है।

आपको विम में कुछ भी करने की आवश्यकता नहीं है क्योंकि यह अपने आप ही सही काम करने में पूरी तरह से सक्षम है।

जब आप tmux या screen उपयोग करते screen , तो वे प्रोग्राम $TERM लिए अपना स्वयं का डिफ़ॉल्ट मान सेट करते हैं, आमतौर पर screen , और Vim वह करता है जो उसे दी गई जानकारी से करना है।

यदि आप अधिक समान (और रंगीन) व्यवहार चाहते हैं, तो आपको $TERM लिए "बेहतर" मान का उपयोग करने के लिए उन्हें कॉन्फ़िगर करना होगा:

  • tmux

    इस लाइन को ~/.tmux.conf :

    set -g default-terminal "screen-256color"
    
  • स्क्रीन

    इस लाइन को ~/.screenrc :

    term "screen-256color"
    

अब, दोनों मल्टीप्लेक्सर्स विम को बताएंगे कि वे 256 रंगों का समर्थन करते हैं और विम वह करेगा जो आप इसे करने की उम्मीद करते हैं।

संपादित करें

मेरा उत्तर मानता है कि आप उन कॉन्फ़िगरेशन फ़ाइलों को संपादित करने में सक्षम हैं, लेकिन जब से आप अपने ~/.vimrc को संपादित करने में सक्षम हैं, मुझे नहीं लगता कि मैं उस निशान से बहुत दूर हूं।

संपादित करें २

term विकल्प का मूल्य ( &term साथ प्राप्त) टर्मिनल का नाम है जैसा कि स्टार्टअप पर विम द्वारा उठाया गया है। वह नाम जो आप अपने टर्मिनल एमुलेटर में स्वयं सेटअप करने वाले हैं।

t_Co विकल्प ( &t_Co ) का &t_Co वह है जो विम अधिकतम रंगों को मानता है जो होस्ट टर्मिनल द्वारा प्रदर्शित किए जा सकते हैं। यह terminfo में $TERM अनुरूप प्रविष्टि के अनुसार परिभाषित किया गया है:

 term            | t_Co
-----------------+------ 
 xterm           | 8
 xterm-256color  | 256
 screen          | 8
 screen-256color | 256

जब विम शुरू होता है, तो यह TERM पर्यावरण चर का मान प्राप्त करता है, उस मान के साथ terminfo डेटाबेस पर सवाल terminfo है और इसके वातावरण में कई t_… वैरिएबल के कई t_… जिनमें… t_Co में उपलब्ध रंगों की संख्या। एक "कानूनी" टर्मिनल प्रकार (एक जिसे विम देख सकता है) को देखते हुए, विम हमेशा रंगों की सही संख्या मानता है।

अपने विम-परिभाषित मूल्य पर term छोड़ते समय t_Co को 256 सेट करना - या, अधिक सामान्य रूप से, t_Co और / या ऐसे मान की स्थापना करना जो होस्ट टर्मिनल के साथ मेल नहीं खाते हैं - कोई मतलब नहीं है और जब Vim एक संकेत भेजता है तो परेशानी पैदा करेगा। यह टर्मिनल या इसके विपरीत से समझ में नहीं आता है।

हालांकि ऐसा करना पूरी तरह से संभव है, विम में t_Co और term साथ खिलवाड़ करना पूरी तरह से बेकार और संभवतः हानिकारक है।

फिर से, अपने टर्मिनल एमुलेटर और टर्मिनल मल्टीप्लेक्स को सही ढंग से सेट करें। यह वास्तव में आप सभी की जरूरत है।

यदि आप एक टर्मिनल मल्टीप्लेक्स या एक टर्मिनल एमुलेटर में समाप्त होते हैं, जहाँ आप एक सही TERM को परिभाषित नहीं कर सकते हैं, तो और केवल तब ही आप Vim को 256 रंगों को मानने के लिए बाध्य कर सकते हैं। उस अंत तक, t_Co के मूल्य को t_Co ही एकमात्र चीज़ है जो समझ में आता है:

if &term == "screen"
  set t_Co=256
endif

इसलिए ... यदि आप प्रत्येक व्यक्तिगत भाग को कॉन्फ़िगर कर सकते हैं :

  • टर्मिनल एमुलेटर: xterm-256color
  • tmux / स्क्रीन: screen-256color
  • vim: कुछ भी नहीं

और आप कर रहे हैं

यदि आप हर भाग को नियंत्रित नहीं कर सकते , तो अपने ~/.vimrc में एक साधारण सशर्त का उपयोग t_Co को &term अनुसार सेट करने के लिए करें &term लेकिन &term का मान न बदलें।

लेकिन अगर आप एक ~/.vimrc संपादित कर सकते हैं तो कोई कारण नहीं है कि आप ~/.screenrc या ~/.tmux.conf या ~/.bashrc या जो कुछ भी संपादित नहीं कर सकते।





xterm