क्या मैं विम विंडो में इंटरेक्टिव शेल जारी कर सकता हूं?


17

मुझे पता है कि मैं बाहरी कमांड को निष्पादित :!या :r!निष्पादित कर सकता हूं और वैकल्पिक रूप से इसका आउटपुट टेक्स्ट में डाल सकता हूं । मैं प्रदर्शन भी कर सकता हूं :!shऔर जब तक मैं इसे बाहर नहीं निकालूंगा, तब तक मैं एक खोल फोड़ूंगा - लेकिन जब तक यह गोला सक्रिय रहता है, विम 'सो' और दुर्गम है। मुझे खोल छोड़ना चाहिए, और एक नया स्पॉन करना चाहिए अगर मैं एक पल के लिए विम पर लौटना चाहता हूं - बहुत उपयोगी नहीं है।

मैं विपरीत छोर पर शेल तक पहुंच सकता हूं, विम को निलंबित करने के ^Zमाध्यम से और के माध्यम से विम नौकरी का प्रबंधन कर सकता हूं bg, fgऔर jobs। यह अधिक समझ में आता है लेकिन लंबे समय में बहुत बोझिल है। मैं इसका उपयोग कर सकता हूं Screenयदि यह उपलब्ध है (यह अक्सर नहीं होता है), या मेरे विंडो मैनेजर की कई खिड़कियां खोलें (और क्रम से उनमें से प्रत्येक से होस्ट को लक्षित करने के लिए ssh, दूरस्थ होस्ट पर फिर से और खोल दोनों को बोझिल करने के लिए।)

यह सबसे साफ होगा अगर विम ने मुझे एक शेल सत्र खोलने और अपनी आंतरिक (एक) खिड़कियों में से किसी एक को खोलने या कहने की अनुमति दी, या मुझे इसे वापस स्विच करने की अनुमति दी। क्या ऐसा कुछ संभव है?


1
तो मूल रूप से, आप :splitदूसरी विंडो में फ़ाइल को बनाए रखते हुए, एक खोल खोलना चाहते हैं? ... यह मुझे tmux या स्क्रीन के लिए एक नौकरी की तरह लगता है ...
मार्टिन Tournoij

1
@Carpetsmoker: मैं अक्सर रिमोट सिस्टम पर स्थापित किया गया है पर नियंत्रण नहीं है, और अधिक बार दोनों में से कोई भी नहीं है, जबकि विम हमेशा वहाँ है।
एसएफ।

नेओविम पर स्विच करने पर विचार करें। इसमें अब एक बिल्ट इन टर्मिनल एमुलेटर है जो काफी अच्छी तरह से काम करता है और इसे एक विम बफर में खोला जा सकता है।
Zach

जवाबों:


16

विम प्लग के एक जोड़े हैं जो इसके लिए अनुमति देते हैं। मैं Conque ( Github ) का उपयोग करता हूं

इसे अपनी प्लगइन्स निर्देशिका में रखने के बाद आपको बस इतना करना है:

:ConqueTermSplit bash

और आपके पास विम में एक इंटरैक्टिव बैश शेल होगा। फिर आप अपने नियमित vim जेस्चर का उपयोग विंडो में कुछ और करने के लिए कर सकते हैं।

इसके अलावा अन्य प्लगइन vimshell है


1
प्लगइन के बिना इस तरह से कुछ भी करने का कोई तरीका नहीं है?
एसएफ।

3
@ एसएफ देखें :help shell-window। (संक्षिप्त उत्तर: नहीं।)
मूरू

3

VIM के साथ मेरा मानना ​​है कि ऐसा करने के लिए जो प्लगइन्स हैं, वे सभी महान नहीं हैं, हालांकि IMO विम्सशेल सबसे नज़दीक आता है। हालाँकि आपको यह समझने की आवश्यकता है कि यह 2 भाग की समस्या है।

  1. वीआईएम को इस तरह की चीजों को करने में सक्षम नहीं बनाया गया था, विशेष रूप से बोझिल किसी भी लंबे चलने वाले कार्य को निष्पादित करने में सक्षम है और वीआईएम को अवरुद्ध किए बिना अतुल्यकालिक रूप से बात कर रहा है। इस मामले में यह केवल शेल ही नहीं बल्कि अन्य कार्य भी हैं जिन्हें आप शेल प्रक्रिया के भीतर निष्पादित कर सकते हैं।
  2. वीआईएम के मोडल दर्शन उस तरह से नहीं खेलते हैं जिस तरह से हम एक शेल के साथ बातचीत करते हैं। एक शेल में केवल वर्तमान लाइन संपादन योग्य है, हालांकि आप अपने इतिहास के पुराने पाठ को शेल के साथ स्क्रॉल और देख सकते हैं जिसे आप इसे संपादित नहीं कर सकते। यह वीआईएम के दर्शन में बिल्कुल भी फिट नहीं है, यदि आप ईएससी को दबाते हैं और सामान्य मोड पर वापस जाते हैं, तो उपयोगकर्ता को वापस जाने और ऊपर के इतिहास के कुछ हिस्सों को संपादित करने में काफी मुश्किल हो जाएगी।

मेरी राय में 2 दृष्टिकोण हैं जो इस संबंध में बहुत बेहतर काम करते हैं।

  1. TMUX / स्क्रीन और मल्टीप्लेक्स टर्मिनल विंडो का उपयोग करने के लिए विम और शेल दोनों हैं। इस तरह दोनों बड़े करीने से अलग हो जाते हैं और फिर भी आप दोनों को बहुत ही कम प्रयास के साथ देख सकते हैं और दोनों एक दूसरे के प्रवाह के साथ संघर्ष किए बिना अपनी क्षमता के सर्वश्रेष्ठ काम कर सकते हैं।
  2. Tpope / vim-dispatch जैसे प्लगइन्स का उपयोग करना और पसंद को आप आसानी से एक शेल कमांड को लॉन्च कर सकते हैं और उन्हें वास्तविक टर्मिनल शेल में पृष्ठभूमि में अतुल्यकालिक रूप से चलाते हैं और एक बार पूरा होने पर परिणाम को वापस खींच लेते हैं। यह आपको दोनों के बीच समान स्तर का अलगाव भी प्रदान करता है और इसलिए दोनों फिर से एक दूसरे के पैर की उंगलियों पर कदम रखे बिना अपनी क्षमताओं के सर्वश्रेष्ठ में काम कर सकते हैं।

मुझे यह जोड़ना चाहिए कि एक अच्छी संभावना है कि NeoVIM इस पहलू में बदलाव ला सकता है क्योंकि इसका एक मुख्य लक्ष्य नौकरियों को अतुल्यकालिक रूप से निष्पादित करने में सक्षम हो रहा है। लेकिन तब तक यह सबसे अच्छा है जब तक हम अपनी राय में पा सकते हैं।


3

में :help shell-windowहम एक विंडो में खोल आदेशों को क्रियान्वित करने के बारे में पढ़ सकते हैं:

विम के अंदर एक विंडो में एक शेल को निष्पादित करने की संभावना के लिए सवाल किए गए हैं।

जवाब: आप नहीं कर सकते!

इसमें शामिल करना विम के लिए बहुत सारे कोड जोड़ देगा, जो ऐसा न करने का एक अच्छा कारण है। आखिर, विम एक संपादक है , यह गैर-संपादन कार्यों को करने के लिए नहीं है। हालाँकि, ऐसा कुछ पाने के लिए, आप " स्प्लिटवेट " प्रोग्राम के साथ अपनी टर्मिनल स्क्रीन या डिस्प्ले विंडो को विभाजित करने का प्रयास कर सकते हैं ।

एक विकल्प " विंडो " कमांड है, जो बीएसडी यूनिक्स सिस्टम पर पाया जाता है, जो कई ओवरलैप्ड विंडो का समर्थन करता है। या " स्क्रीन " कार्यक्रम।

हालांकि कुछ उपाय हैं जिनका आप उपयोग कर सकते हैं:

  • उपयोग screenजो विशेष रूप से चीजों, जैसे उस तरह के लिए बनाया गया है:

    • Ctrl+ a, Sवर्तमान विंडो को क्षैतिज रूप से विभाजित करने के लिए
    • Ctrl+ a, Tabखिड़कियों के बीच स्विच करने के लिए
    • Ctrl+ a, Xवर्तमान क्षेत्र को हटाने के लिए
    • Ctrl+ a, Qसभी क्षेत्रों को हटाने के लिए , लेकिन एक

    स्टैकओवरफ्लो एसई में जीएनयू स्क्रीन सरवाइवल गाइड : अधिक देखें

    या: GNU स्क्रीन विभाजन , अधिक विवरण के लिए स्क्रीन त्वरित संदर्भ

  • वीआईएम-शेल - एक तृतीय-पक्ष पैच

    VIM- शेल VIM के लिए एक एक्सटेंशन है जिसमें स्पिलिट विंडो की सुविधा है, और यह पैच उन विंडो में शेल शुरू करना संभव बनाता है। यह केवल POSIX सिस्टम के लिए उपलब्ध है

  • vterm - vim के अंदर टर्मिनल एमुलेटर।

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

  • विमक्स - आसानी से विम से tmux के साथ बातचीत।

    Tslime.vim से प्रेरित होकर , एक प्लगइन जो आपको tmux पर इनपुट भेजने देता है, vimux को vim के साथ सरलता से tmux के साथ इंटरैक्ट करना है।

  • अन्य पहले से ही उल्लेख किया गया है: शंकु

संबंधित: विम के अंदर टर्मिनल कैसे चलाएं? स्टैकओवरफ्लो पर


कैसे मिलेगा फूट से छुटकारा ?? : - /
0xc0de

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