एक स्प्लिट पेन में शेल कमांड का आउटपुट खोलें


23

किसी भी व्याख्या की गई प्रोग्रामिंग भाषा पर विचार करें।

मैं वर्तमान में खोली गई स्क्रिप्ट का उपयोग करके चला सकता हूं ! interpreter %, और निष्पादन समाप्त होने के बाद वापस लौटने के लिए वापसी कुंजी का उपयोग कर सकता हूं ।

क्या यह किसी भी तरह से निष्पादित शेल कमांड के आउटपुट के साथ वर्तमान विंडो को बदलना संभव नहीं है, लेकिन इसके बजाय एक नए विभाजन फलक में आउटपुट खोलें? मैं अपनी स्क्रिप्ट के निष्पादन के दौरान अभी भी अपने स्रोत कोड को देखना चाहूंगा।

मैंने कोशिश की :split ! interpreter %, लेकिन यह काम नहीं किया।

क्या उधर रास्ता है? मैं 7.3.३ का उपयोग कर रहा हूं।

जवाबों:


29

के साथ :!, बाहरी कमांड को एक शेल में निष्पादित किया जाता है, और क्षणभंगुर आउटपुट को विम के अंदर कैप्चर नहीं किया जाता है; आप बस देखते हैं कि टर्मिनल के लिए क्या प्रिंट हो जाता है, फिर बाहरी कमांड खत्म होने के बाद विम पर नियंत्रण नियंत्रित करें।

आउटपुट रखने के लिए, आपको इसे Vim बफर में पढ़ना होगा । उसके लिए, :read!कमांड है। एक नया स्क्रैच बफर खोलने के लिए , इस के साथ गठबंधन करें :new:

:new | 0read ! <command>

यदि आप वर्तमान बफ़र का फ़ाइल नाम ( %) बाह्य आदेश में पास करना चाहते हैं :execute, तो आपको इसका उपयोग करना होगा , ताकि वर्तमान बफ़र में इसका पहले ही मूल्यांकन हो जाए:

:execute 'new | 0read ! interpreter' expand('%')

या, आप इस तथ्य का उपयोग करते हैं कि एक नए बफर के साथ, पिछला एक वैकल्पिक एक बन जाता है , और #इसके बजाय का उपयोग करें %:

:new | 0read ! interpreter #

के साथ खरोंच बफर से छुटकारा पाएं :bdelete!

यदि आप आउटपुट को एसिंक्रोनस रूप से देखना चाहते हैं, जबकि यह निष्पादित होता है, तो आपको बाहरी मल्टीप्लेक्स, या एक प्लगइन की आवश्यकता होती है, जैसा कि @chaos उत्तर में बताया गया है।


उपरोक्त ": निष्पादित करें ..." कमांड मेरे लिए काम करती है, लेकिन जब मैं इसका उपयोग करते हुए F9 keystroro को बांधने की कोशिश करता हूं, तो इसका उपयोग करते हुए .vimrc प्रविष्टि [nnoremap <बफर> <F9>: execute 'नई | 0read! / Usr / bin / env python3 '('% ') का विस्तार करें], मुझे निम्नलिखित त्रुटि मिलती है: [/ bin / bash: -c: line 0: अनपेक्षित EOF, जो' '' विस्तार '('% ') की तलाश में है )]। मैंने कई भागने के दृश्यों की कोशिश की, लेकिन मुझे लगता है कि सही नहीं है। = :)। कोई विचार? धन्यवाद।
NYCeyes 23

2

जहाँ तक मुझे पता है, आप ऐसा नहीं कर सकते vim। लेकिन इसके लिए एक टर्मिनल मल्टीप्लेक्सर का उपयोग करें screen। मल्टीप्लेक्स शुरू करने से पहले एक विमी:

screen

फिर प्रेस करें ctrl- a Sहॉरिजॉन्टल के लिए और ctrl- a |एक ऊर्ध्वाधर स्पिल्ड स्क्रीन के लिए।

अब vimविभाजित स्क्रीन में से एक में एक फ़ाइल खोलें । और उपयोग करते हुए दूसरी स्क्रीन पर जाएं ctrl- a tab। ध्यान दें कि, दूसरी स्क्रीन में आपको सबसे पहले एक नई स्क्रीन ( ctrl- a c) खोलनी होगी, इससे पहले कि आप उसका उपयोग कर सकें।

Vim वाली स्क्रीन में आप फ़ाइल को संपादित कर सकते हैं और दूसरी स्क्रीन में आप इसे निष्पादित कर सकते हैं और संदेशों और कोड को स्थायी रूप से देख सकते हैं।

यहाँ एक त्वरित संदर्भ के लिए screen


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