2015-07-22 4 views
7

जब आप vim दर्ज करते हैं, तो यह स्क्रीन को "साफ़ करता है"। बाहर निकलने पर, यह मूल सामग्री को "पुनर्स्थापित" करता है।वीआईएम अस्थायी रूप से पूरे कंसोल को ओवरराइट करने की अनुमति देता है?

मुझे लगता है कि कंसोल को साफ़ करने और कर्सर की स्थिति को रीसेट करने के लिए कोई \x1b[2J का उपयोग कर सकता है, लेकिन यह टर्मिनल सामग्री को ओवरराइट करेगा।

मुझे लगता है कि विम हुड के नीचे ncurses का उपयोग करता है, इस मामले में मुझे लगता है कि बेहतर सवाल यह है कि कैसे ncurses यह करता है, लेकिन यह कैसे किया जाता है?

उत्तर

7

अधिकांश टर्मिनल अनुकरणकर्ता स्क्रीन की सामग्री को सहेजने और पुनर्स्थापित करने में सक्षम हैं।

इसके लिए टर्मिनो कोड smcup पूर्ण स्क्रीन मोड और rmcup दर्ज करने के लिए इसे छोड़ने के लिए हैं। , किसी भी कार्यक्रम ncurses का उपयोग करता है प्रवेश पर smcup स्ट्रिंग प्रिंट होगा, और बाहर निकलने पर rmcup स्ट्रिंग (पुराने termcap कोड ti और te कर रहे हैं।)

इन क्षमताओं terminfo डेटाबेस में सक्षम हैं, तो।

प्रणाली मैं इस समय का उपयोग कर रहा पर, तार (\E भागने चरित्र का प्रतिनिधित्व करने के साथ) कर रहे हैं:

smcup: \E7\E[?1;47h 
rmcup: \E[2J\E[?1;47l\E8 

इस स्क्रीन के पिछले सामग्री के साथ-साथ कर्सर स्थिति पुनर्स्थापित करता है।

दृश्यों के विशिष्ट अर्थ (टर्म के लिए) documented here हैं:

  • smcup:
    • \E7 सहेजें कर्सर
    • \E[?1;47h आवेदन कर्सर कुंजी; वैकल्पिक स्क्रीन का उपयोग बफर
  • rmcup:
    • \E[2J मिटाएं स्क्रीन
    • \E[?1;47l आवेदन कर्सर कुंजी; सामान्य स्क्रीन बफर
    • \E8 का उपयोग करें पुनर्स्थापित कर्सर

(इसका मतलब यह है मैं सही ढंग से अर्धविराम के उपयोग को समझने कर रहा हूँ;। मैं 100% है कि के बारे में सुनिश्चित नहीं कर रहा हूँ)

+0

कुछ नया सीख लिया। यह बहुत समझाता है; धन्यवाद। – Qix

+2

एप्लिकेशन कर्सर-कुंजी सेट करना सामान्य रूप से smcup/rmcup में नहीं किया जाता है - अधिकांश प्रोग्राम मानते हैं कि यह प्रारंभिक स्ट्रिंग (is2) में किया जाता है। उदाहरण के लिए देखें [पुटी] (http://invisible-island.net/ncurses/terminfo.src.html#tic-putty) ncurses टर्मिनल डेटाबेस में। और निश्चित रूप से, मोड 47 को xterm के साथ अप्रचलित कर दिया गया है (जब से [1 99 8] (http://invisible-island.net/xterm/xterm.log.html#xterm_90))। –

+1

@ थॉमस डिकी: जाहिर है कि मेरी टर्मकैप/टर्मिनो प्रविष्टियां पुरानी हैं (जो आश्चर्यजनक नहीं है)। जानकारी के लिए धन्यवाद। मैं कुछ शोध करूँगा और अपना उत्तर रियल जल्द ही अपडेट करूंगा। –

8

के बारे में @Keith Thompson — द्वारा जवाब नहीं वास्तव में:

  • vim ncurses की स्क्रीन अनुकूलन का उपयोग नहीं करताभेजता है जोऔर rmcup स्वचालित रूप से। इसके बजाय, यह termcap application है। यह का पालन करता है जो अधिकांश (सभी नहीं) टर्मकैप अनुप्रयोगों द्वारा उपयोग किया जाता है। vi के कुछ कार्यान्वयन हैं जो उदाहरण के लिए नहीं (शायद IRIX64 पर)।
  • "अधिकांश टर्मिनलों" के लिए — वास्तव में, xterm look-alikes terminal database (यहां तक ​​कि भिन्नता की गणना, 10% से कम) का एक छोटा सा हिस्सा हैं। की तरह कुछ करने के लिए इस प्रकार संशोधित करें कि "लिनक्स पर सबसे आम टर्मिनल emulators।
  • टर्मिनल नहीं बचाने और बहाल स्क्रीन की सामग्रियों को करता है। इसके बजाय, यह दोनों के बीच स्क्रीन (स्विच टर्म के दस्तावेज में" सामान्य "और" वैकल्पिक ")। उदाहरण के लिए टर्म में, एक हमेशा दोनों के बीच एक मेनू प्रविष्टि। टर्म पूछे जाने वाले प्रश्न Why doesn't the screen clear when running vi? अधिक विस्तार देता है का उपयोग कर बेहतर संदर्भ के लिए बदल सकते हैं।
  • , ध्यान दें कि smcupसेट के लिए एक (अस्पष्ट) संक्षिप्त नाम है -मोड-कर्सर-स्थिति, या प्रारंभ कर्सर-पोजिशनिंग मोड। (कर्सर-एड्रेसिंग)। rrmcup में "रीसेट" का अर्थ है (और m का मतलब है "मोड")। सेट/रीसेट को सहेजने/पुनर्स्थापित करने से अलग-अलग अर्थ हैं; उत्तरार्द्ध के साथ उपयोगकर्ता को विश्वास है कि मूल्यों को ढेर किया जा सकता है।
संबंधित मुद्दे