2010-05-21 15 views
37

मैंने अपने emacs को ansi-term के भीतर zsh खोल चलाने के लिए कॉन्फ़िगर किया है। हालांकि, कॉपी/पेस्ट अब काम नहीं करता है यानी मारियो-रिंग से टर्मिनल तक कुछ भी चिपकाया नहीं जा रहा है। टीईआरएम को vt100 में बदलना, या ईटर्म समस्या को हल नहीं करता है।emacs ansi-term shell में कॉपी/पेस्ट

किसी भी विचार या समाधान की सराहना करेंगे।

संदर्भ प्रदान करने के लिए इस प्रकार के रूप में मैं एएनएसआई अवधि के लिए कॉन्फ़िगर किया है:

(global-set-key "\C-x\C-a" '(lambda()(interactive)(ansi-term "/bin/zsh"))) 
(global-set-key "\C-x\ a" '(lambda()(interactive)(ansi-term "/bin/zsh"))) 

उत्तर

60

टर्मिनल का उपयोग करते समय आप बस चरित्र मोड और लाइन मोड के बीच स्विच करना चाहते हैं। सी-एक्स सी-जे टर्म-लाइन-मोड को सक्रिय करेगा, जो टर्मिनल बफर को सामान्य टेक्स्ट-बफर की तरह अधिक व्यवहार करता है जिसमें आप कर्सर और यांक टेक्स्ट को स्थानांतरित कर सकते हैं। आप सी-सी सी-के साथ चरित्र मोड पर वापस स्विच कर सकते हैं।

+0

ग्रेट टिप, धन्यवाद! +1 – danlei

+0

यह दाएं संरेखित संकेत के साथ बहुत अच्छी तरह से काम नहीं करता है कि zsh जैसे चीजें प्रदान करते हैं। – l0st3d

+14

Emacs 24 में, ऐसा प्रतीत होता है कि टर्मिनल में आपको लाइन मोड प्राप्त करने के लिए 'सी-सी सी-जे' दबाए जाने की आवश्यकता होती है, और फिर वापस पाने के लिए, यह उपरोक्त के रूप में 'सी-सी सी-के' है। – djhaskin987

5

ansi-term, char-mode में, टर्मिनल अनुकरण के लिए साधारण बाइंडिंग लेता है। आपको एक नया बाध्यकारी, प्लस ansi-term पर आउटपुट करने का एक तरीका चाहिए। मैं इसका उपयोग करता हूं:

(defun ash-term-hooks() 
    ;; dabbrev-expand in term 
    (define-key term-raw-escape-map "/" 
    (lambda() 
     (interactive) 
     (let ((beg (point))) 
     (dabbrev-expand nil) 
     (kill-region beg (point))) 
     (term-send-raw-string (substring-no-properties (current-kill 0))))) 
    ;; yank in term (bound to C-c C-y) 
    (define-key term-raw-escape-map "\C-y" 
    (lambda() 
     (interactive) 
     (term-send-raw-string (current-kill 0))))) 
    (add-hook 'term-mode-hook 'ash-term-hooks) 

जब आप ऐसा करते हैं, तो सी-सी सी-वाई यंक होगा। यह केवल एक यंक करता है, और आप अपने हत्या-बफर के माध्यम से चक्र नहीं कर सकते हैं। ऐसा करना संभव है, लेकिन मैंने अभी तक इसे लागू नहीं किया है।

+0

आपकी प्रतिक्रिया की सराहना करें। ए ")" अंत में गायब था। दुर्भाग्यवश यह मेरे लिए काम नहीं कर रहा है। मुझे त्रुटि मिल रही है सी-सी सी-वाई अपरिभाषित है। – Sandeep

+0

एचएम, मैंने Emacs 23.2 के साथ "emacs -q" चलाने की कोशिश की, और (आपके द्वारा छोड़े गए लापता माता-पिता को ठीक करने के बाद), मैंने मूल्यांकन किया, कुछ यादृच्छिक पाठ की प्रतिलिपि बनाई, फिर ansi-term शुरू किया। सी-सी सी-वाई दबाकर वास्तव में इसे पेस्ट किया गया था। चूंकि यह एक हुक का उपयोग कर रहा है, इसलिए सुनिश्चित करें कि आपने इसका मूल्यांकन करने के बाद ansi-term को पुनरारंभ किया है। अगर यह काम नहीं करता है, तो इसे शुरू करने वाले emacs पर कोशिश करें। आप सी-सी सी-एच दबाकर भी कोशिश कर सकते हैं, जो सी-सी से शुरू होने वाली बाइंडिंग सूचीबद्ध करता है। सी-सी सी-वाई के साथ सूचीबद्ध किया जाना चाहिए ?? (?? क्योंकि हम एक अनाम लैम्बडा का उपयोग कर रहे हैं)। – user347585

+0

हैलो। मैंने emacs को बिना और बिना दोनों के पुनरारंभ करने का प्रयास किया। लेकिन यह अभी भी काम नहीं कर रहा है। मैं उबंटू पर इमाक्स 23.1 का उपयोग कर रहा हूं। आर सी-सी सी-एच सामान्य रूप से emacs शुरू करते समय कोई बाध्यकारी नहीं दिखाता है। साथ-साथ मेरे पास कई बाइंडिंग हैं लेकिन सी-सी सी-वाई के बारे में कोई नहीं।क्या कोई लॉग या डिबग आउटपुट है जो मैं देख सकता हूं कि क्या गुम है। धन्यवाद। -Sandeep – Sandeep

5

जैसा कि this lovely blog snippet में वर्णित है, में एक फ़ंक्शन, term-paste है, जो वही है जो आप चाहते हैं। डिफ़ॉल्ट रूप से यह केवल S-insert तक सीमित है लेकिन ब्लॉग की अनुशंसित C-c C-y एक अच्छा सुझाव जैसा प्रतीत होता है।

0

ये अन्य समाधान मेरे लिए अच्छा काम नहीं करते हैं, चरित्र मोड और लाइन मोड के बीच स्विचिंग एन्सी-टर्म को यादृच्छिक रूप से काम करना बंद कर देता है, और एसीआई-टर्म का टर्म-पेस्ट सीसी साइ (ग्लाइफ के लिंक पर आधारित) पर सेट करता है, काम नहीं किया कोड स्निपेट अवधि के लिए किया गया था, नहीं एएनएसआई अवधि:

(eval-after-load "ansi-term" 
    '(define-key ansi-term-raw-map (kbd "C-c C-y") 'term-paste)) 
0

ऊपर समाधान कुछ बफर से पाठ को कॉपी एएनएसआई अवधि के लिए अच्छी तरह से काम है, लेकिन वे एएनएसआई से पाठ की प्रतिलिपि में सक्षम नहीं हैं -एक अन्य बफर के लिए (उदाहरण के लिए एक कमांड कॉपी करें जिसे आप बस एक शेल स्क्रिप्ट में चला रहे हैं जिसे आप संपादित कर रहे हैं)। मेरी .emacs फ़ाइल को यह जोड़ा जा रहा है मेरे लिए कि समस्या हल (Emacs 24.4 में):

(defun my-term-mode-hook() 
    (define-key term-raw-map (kbd "C-y") 'term-paste) 
    (define-key term-raw-map (kbd "C-k") 
    (lambda() 
     (interactive) 
     (term-send-raw-string "\C-k") 
     (kill-line)))) 
(add-hook 'term-mode-hook 'my-term-mode-hook) 

ध्यान दें कि आप एक कीस्ट्रोक कि (डिफ़ॉल्ट रूप से एएनएसआई अवधि भागने पात्रों के साथ शुरू होता है को मार/झटका बाध्य करने के लिए चाहते हैं, तो सीसी और सीएक्स), और यह असंभव घटना में काम करना चाहते हैं कि वे परिवर्तन, आप इसके बजाय अपने कीस्ट्रोक (बिना किसी बचने के) को term-raw-escape-map पर परिभाषित कर सकते हैं, जैसा कि उपयोगकर्ता347585 के उत्तर में किया गया है।

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