GNU स्क्रीन के तहत vim में CTRL- * फिक्सिंग


10

जब GNU स्क्रीन के नीचे विम चल रहा है, तो मुझे लगता है कि CTRLतीर और Pg * कुंजियों के संयोजन उम्मीद के मुताबिक काम नहीं कर रहे हैं।

मैं Ubuntu 10.10 vim-gnomeपैकेज का उपयोग कर रहा हूं ।

एक अलग मशीन पर, उबंटू भी चल रहा है, इसने समस्याओं के बिना काम किया; दुर्भाग्य से मेरे पास अब वह कॉन्फ़िगरेशन उपलब्ध नहीं है।

यहाँ एक संबंधित प्रश्न है: विम में Ctrl + तीर कैसे ठीक करें?

हालांकि, सुझाव दिया समाधान टर्मिनल एमुलेटर के साथ काम करने के लिए विम की कीपिंग को हटाने के लिए है, उस स्थिति में पुट्टी। मुझे कुछ भी करने की याद नहीं है, और संदेह है कि एक स्क्रीन कॉन्फ़िगरेशन विकल्प है जो इस समस्या को हल करेगा।

ग्नू-स्क्रीन मेलिंग सूची पर एक थ्रेड भी है जो बताता है कि रनिंग वीम $ TERM=xterm vimएक उपयुक्त फिक्स या वर्कअराउंड है। यह काम करता है, लेकिन मैं थोड़ा चिंतित हूं कि दुष्प्रभाव हो सकते हैं। यह भी पर्याप्त परिचित नहीं लगता है कि मैं दूसरे मशीन पर स्थापित समाधान (यदि कोई समाधान आवश्यक था) हो।


+1 - मुझे वही समस्या हो रही थी और - जैसा कि आपने सुझाव दिया - term xtermमेरी ~/.screenrcफ़ाइल में जोड़कर मेरे लिए इसे ठीक कर दिया। एक बार फिर धन्यवाद!
जस्टिन एथियर

जवाबों:


4

जैसा कि उनके अद्यतन में कहा term xtermगया है, ~/.screenrcफ़ाइल में जोड़ना इस समस्या को ठीक करता है।


ठीक है .. हाँ, लेकिन मैं किसी तरह के स्पष्टीकरण के लिए पकड़ रहा हूं screenकि $TERMपर्यावरण चर को केवल इसके साथ ओवरराइड करने के बजाय प्रचार क्यों नहीं करता है "screen"। मुमकिन है कि कुछ परिस्थितियां ऐसी हों जहां होना जरूरी है $TERM == screen
intuited

3
@intuited: स्क्रीन सेट TERM=screenका कारण यह है कि अंदर चल रहे एप्लिकेशन स्क्रीन टर्मिनल के अंदर संचार कर रहे हैं: वे जो कंट्रोल सीक्वेंस भेजते और प्राप्त करते हैं, वे स्क्रीन के होते हैं, न कि उन टर्मिनल स्क्रीन के जो कुछ भी प्रदर्शित हो रहे हैं। चूंकि आप एक स्क्रीन सत्र को अलग कर सकते हैं और इसे एक अलग प्रकार के टर्मिनल में बदल सकते हैं, इसलिए अप्रत्यक्ष की यह परत आवश्यक है।
गिलेस एसओ- बुराई को रोकना '

@ गिल्स: थैंक्स, मुझे कुछ ऐसा ही शक था। इसे रीसेट करने से किस तरह की समस्याएं उत्पन्न हो सकती हैं xterm?
१०:१० पर

1
ज्यादा नहीं, क्योंकि xterm और स्क्रीन ज्यादातर संगत हैं। लेकिन प्रत्येक में कुछ क्षमताएं होती हैं जो दूसरे को नहीं होती हैं, और यदि आप अनुप्रयोगों के लिए झूठ बोलते हैं, तो वे एक ऐसी क्षमता का उपयोग कर सकते हैं जो वास्तव में काम नहीं करता है। के उत्पादन की तुलना करें infocmp screenऔर infocmp xterm, और स्क्रीन भागने दृश्यों के साथ टर्म भागने दृश्यों । मेरे पास एक टूटने की पेशकश नहीं है; अधिकांश अनुप्रयोगों को बुरा नहीं लगेगा, लेकिन कुछ नाराज व्यवहार कर सकते हैं।
गिलेस एसओ- बुराई को रोकना '

2

टर्मिनल को सेट करने के लिए कुछ अन्य तरीके हैं जो चल रही प्रक्रियाओं में काम करते हैं:

  • एक रनिंग स्क्रीन इंस्टेंस में, प्रेस ^A- :और कमांड जारी करने से उस ओपन के तहत नई ओपन स्क्रीन term xtermआएगी, जो कि उनके पर्यावरण चर के साथ शुरू होगी ; यह बदले में आवृत्त उदाहरणों का प्रचार करेगा । ये vim उदाहरण CTRL-combos के संबंध में उचित व्यवहार प्रदर्शित करेंगे; मैंने अभी तक इस रणनीति के किसी भी दुष्प्रभाव का पता नहीं लगाया है। यह आदेश मौजूदा स्क्रीन को प्रभावित नहीं करता है। यह कमांड निश्चित रूप से एक फाइल में इस्तेमाल की जा सकती है , इसलिए यह संभव है कि इस पद्धति का उपयोग दूसरी मशीन पर किया गया हो।$TERMxtermvim~/.screenrc

  • एक चल रहे उदाहरण में, कमांड set term=xtermउस vim उदाहरण में CTRL-combos काम करेगा। यह उन कारणों के लिए एक्स क्लिपबोर्ड (यानी @*और @+) को डिस्कनेक्ट करने का दुष्प्रभाव है जो मुझे अभी तक समझ में नहीं आया है। दिलचस्प बात यह है कि क्लिपबोर्ड साइड इफेक्ट तब भी होता है जब कमांड :set term=screenको एक वीम इंस्टेंस में निष्पादित किया जाता है $TERM=xterm


यह जवाब ओपी के अपडेट से लिया गया था। मैंने जो कुछ भी किया था, उसे सुधारना और थोड़ा-थोड़ा करना था।
फुनेहे

2

अंतर्निहित समस्या यह है कि screenवास्तविक टर्मिनल ( TERMबाहर पर्यावरण चर द्वारा पहचाना गया screen) और भीतर अनुकरण के बीच की गई मैपिंग screenअधूरी है।

आप इसे (इसका परीक्षण करना हो तो vttest या कील ), आप के लिए तत्वों की कमी देख सकते हैं

  • रंग की
  • विशेष कुंजी

स्थापना करके इन समस्याओं को ठीक करने का प्रयास termमें .screenrcदोष यह है कि यह केवल के लिए काम करता है एक वास्तविक टर्मिनल दिया, और अन्य टर्मिनल कार्यान्वयन करने के लिए पोर्टेबल नहीं है। प्रलेखन नोट

गैर-डिफ़ॉल्ट उद्देश्य के लिए शब्द कमांड का उपयोग हतोत्साहित किया जाता है।

screen प्रलेखन से इस सुविधा का उपयोग करते हुए एक और समाधान (एक अलग दोष के साथ) है :

जब स्क्रीन अपने लिए एक टर्मिनल नाम पता लगाने की कोशिश करती है, तो यह पहली बार स्क्रीन नामक एक प्रविष्टि की तलाश करता है टर्म , जहां टर्म आपके $TERMवैरिएबल की सामग्री है । यदि ऐसी कोई प्रविष्टि मौजूद नहीं है, तो स्क्रीन कोशिश करता है screen(या screen-w, यदि टर्मिनल चौड़ा है (132 कॉल या अधिक))। यहां तक ​​कि अगर यह प्रविष्टि नहीं मिल सकती है, vt100तो विकल्प के रूप में उपयोग किया जाता है।

ncurses इस मामले के लिए कई उपयोगी वैकल्पिक टर्मिनल विवरण प्रदान करता है, जैसे, screen.xterm-new , स्क्रीन की मैपिंग में समस्याओं की मरम्मत करने के लिए। व्यवहार में, मैं उपयोग करता हूं TERM=xterm-new, और स्क्रीन चलाते समय, फ़ंक्शन कुंजियों की उपयोग करने योग्य मैपिंग प्राप्त करता हूं ।

स्क्रीन की termसेटिंग पर वापस जाएं , परीक्षण में आप देख सकते हैं कि मैपिंग में अभी भी समस्याएं हैं, जिन्हें इन विकल्पों में संबोधित किया गया है। यदि इसका उपयोग करके एक सटीक टर्मिनल विवरण प्राप्त करना संभव था term, तो ये विकल्प सरल उपनाम होंगे screen। वो नहीं हैं।

ncurses (sic) प्रदान नहीं करता है screen.xtermक्योंकि:

  • TERM=xtermटर्मिनल एमुलेटर के लिए व्यापक रूप से दुरुपयोग किया जाता है जो xterm से भिन्न होता है; इस मानचित्रण को जोड़ने से केवल उस स्थिति को बढ़ाना होगा (उदाहरण के लिए देखें कि "xterm" पर TERM सेट का उपयोग क्यों न करें? ncurses में)
  • वैकल्पिक नाम screen.xtermरिमोट सिस्टम पर स्थापित होने की संभावना कम है ( टर्मिनल डेटाबेस में जून 2015 से परिवर्तन टिप्पणी देखें )।

कुल मिलाकर, हालाँकि, वैकल्पिक नामों का उपयोग करना termआपके उपयोग में सुधार है .screenrc: यह आपके द्वारा बनाई गई समस्याओं की तुलना में अधिक समस्याओं को हल करता है। रिवर्स termसेटिंग का सच है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.