2011-12-21 18 views
10

उदाहरण के लिए करने के लिए उत्पादन शेल, मैं की तरह कुछ टाइप करने के लिए सक्षम होना चाहते हैं।पाइप Emacs एक नया बफर

+3

यदि मैं सुझाव दे सकता हूं, तो मैगिट का प्रयास करें। यह वही नहीं कर सकता जो आप चाहते हैं। लेकिन मुझे लगता है कि यह आपकी ज़रूरत के अनुरूप है https://github.com/magit/magit – kindahero

उत्तर

6

आप केवल एम- का उपयोग कर सकते हैं! - यह आपके शेल बफर के समान सीडब्ल्यूडी के भीतर कमांड चलाएगा, और परिणामों को *Shell Command Output* बफर पर आउटपुट करेगा।

ध्यान दें कि यदि परिणाम संक्षिप्त हैं, तो बफर नहीं उठाया जाएगा और आउटपुट को इको क्षेत्र में कॉपी किया जाएगा; हालांकि बफर अभी भी उपयोग और उपलब्ध है। चौधरीshell-commandआरईटी क्या "संक्षिप्त" उत्पादन की संरचना में जो विवरण दिया:

तो उत्पादन काफी कम गूंज क्षेत्र (द्वारा निर्धारित में प्रदर्शित करने के लिए चर max-mini-window-height अगर resize-mini-windows गैर है -निल), यह वहां दिखाया गया है। अन्यथा, आउटपुट युक्त बफर प्रदर्शित होता है।

+3

आप सी-यू एम- का भी उपयोग कर सकते हैं! वर्तमान बफर में आउटपुट डालने के लिए। – Daimrod

+1

@ डेमरोद: यही वही है जो ओपी * नहीं करना चाहता *। वह एक एशेल के अंदर है और एक कमांड के आउटपुट को एक नए बफर में जाना चाहता है। – Thomas

+0

यह शानदार है - धन्यवाद। गायब एकमात्र टुकड़ा सही बफर में नए बफर डाल रहा है। उदाहरण के लिए, यदि मैं 'git diff' के परिणामों को एक नए बफर में भेजता हूं, तो मैं बफर को diff मोड में रखना चाहता हूं। –

8

यदि आप eshell का उपयोग करते हैं तो आप आउटपुट को बफर में रीडायरेक्ट कर सकते हैं, उदा।

print foo > #<buffer bar> 
जो सामग्री 'foo' के साथ एक नया बफर bar बनाता

। अधिक जानकारी के लिए, Emacswiki को http://www.emacswiki.org/emacs/EshellRedirection पर देखें।

+1

धन्यवाद। यह eshell के लिए काम करता है। हालांकि, मैं सामान्य खोल (यानी एम-एक्स खोल) का उपयोग कर रहा हूं। –

+1

यदि एशेल आपके लिए कोई विकल्प नहीं है, तो आप अपने आउटपुट को emacsclient पर पाइप कर सकते हैं। इसके लिए आपको एक स्क्रिप्ट या खोल फ़ंक्शन की आवश्यकता होगी। एक शुरुआती बिंदु के रूप में http://www.emacswiki.org/emacs/EmacsClient#toc43 देखें। –

+0

TRAMP का उपयोग करते समय यह वास्तव में उपयोगी है, उदाहरण के लिए। "foo/ssh: user @ machine:/some/remote/file> # " – Warbo

3

दुर्भाग्य से emacsclient अपने मानक इनपुट को नहीं पढ़ता है, इसलिए आपको किसी प्रकार का रैपर चाहिए। यहाँ एक बैश खोल समारोह है कि मेरे लिए काम करता है:

tempbuffer() { 
    perl -MFile::Temp -MFile::Copy -e \ 
    'copy *STDIN, $file = File::Temp->new; system "emacsclient", $file'; 
} 
+0

आपकी टिप्पणी के लिए धन्यवाद। क्षमा करें, मैं थोड़ा बेवकूफ हूँ। मैंने इस फ़ंक्शन को अपनी बैश फ़ाइल में रखा है, और इसे कंसोल से आवेदक कर सकता हूं। हालांकि, मुझे समझ में नहीं आता कि मैं वास्तव में किस आदेश को चलाने के लिए चाहता हूं (यानी 'गिट diff')। –

+0

जैसे आपकी मूल पोस्ट, यानी। 'गिट diff | tempbuffer'। – Sean

+0

आह मिला। बहुत बहुत धन्यवाद। –

0

मैं एक पैकेज (e-sink) एक प्रारंभिक बिंदु के रूप Emacs विकि से जानकारी का उपयोग किया। जैसा कि आपने वर्णन किया है और जब तक प्रक्रिया सब कुछ प्रदर्शित करने के लिए खत्म नहीं हो जाती है, तब तक यह प्रतीक्षा करने के बजाय "पूंछ" आउटपुट के रूप में काम करता है।

git diff | (f=$(mktemp); cat > $f; emacsclient $f; rm -v $f) 

emacsclient इंतजार कर रहा है आप बफर के साथ समाप्त होने के लिए पहले बैश अस्थायी फ़ाइल को हटाता है:

0

मेरे निजी पसंद कुछ के लिए आप किसी भी फाइल को प्रबंधित किए बिना बैश में टाइप कर सकते हैं।

मैं एम- का उपयोग करूंगा! (फिल्स का जवाब) अगर मैं स्क्रैच से ऊपर शेल कमांड शुरू कर रहा था और उपर्युक्त (जो शॉन के जवाब के समान है) अगर मैं खोल में 'कुछ के बीच में था' और फिर फैसला किया कि 'मैं इसे एमाक्स पर पाइप करना चाहता हूं'।

संबंधित मुद्दे