2010-10-21 8 views
6

मैंने एक्सकोड और नेटबीन का उपयोग किया है, और मैंने देखा है कि उनके पास स्वचालित रूप से उद्धरण चिह्न या कोष्ठक पूर्ण करने की सुविधा है (और मुझे लगता है कि अन्य आईडीई अक्सर यह भी करते हैं)। मुझे नहीं पता कि इस सुविधा का नाम क्या है, लेकिन क्या Emacs में ऐसा करने का कोई तरीका है?क्या Emacs में कोष्ठक या उद्धरण चिह्न स्वत: पूर्ण करना संभव है?

उदाहरण के लिए, जब मैं टाइप

printf(" 

मैं इसे करने के लिए स्वचालित रूप से इनपुट

printf("") 

उद्धरण चिह्नों के बीच में कर्सर रखकर चाहते हैं।

धन्यवाद।

+0

मैंने पहले ऐसा मैक्रो इस्तेमाल किया था, लेकिन आज मैं कई अलग-अलग संपादकों का उपयोग करता हूं (emacs, vs, eclipse, pn) कि मैं इस तरह की सुविधा पर भरोसा नहीं कर सकता। इसके बजाय मैंने इस व्यवहार को आंतरिक बना दिया और बिना किसी संतुलित चरित्र को रिफ्लेक्सिव रूप से डाले बिना बाएं तरफ वाले चरित्र को मुश्किल से टाइप कर सकते हैं। गैर-प्रोग्रामर जो मुझे ऐसा सोचते हुए देखते हैं मैं अजीब हूं। – Zano

उत्तर

7

मूल संस्करण AutoPairs होगा। एक ही प्रभाव लेकिन YASnippet के साथ थोड़ा और परिष्कृत भी हासिल किया जा सकता है।

+0

ऐसा लगता है कि ऑटोपेयर और पेरेडिट दो लोकप्रिय सुझाव हैं, लेकिन ऐसा लगता है कि ऑटोपेयर को YASnippet के साथ अच्छी तरह से एकीकृत करने के लिए बनाया गया है, जो आगे कोड-समापन के लिए अच्छा है। – beardc

2

मैं "इलेक्ट्रिक जोड़े" करने के लिए http://cmarcelo.wordpress.com/2008/04/26/a-little-emacs-experiment/ से कोड का उपयोग कर रहा हूं। जैसा कि मैं my blog में अन्य मोड में पाइथन के ट्रिपल उद्धृत तारों के साथ समस्याएं हैं। (एक पायथन विशिष्टता)

3

यदि आप एम- (टाइप करते हैं, तो एक (और ए) दोनों डालेंगे, और बीच में बिंदु छोड़ दें; यदि आप एम- टाइप करते हैं), जो समापन के दौरान बिंदु को स्थानांतरित करेगा)। यह मेरे लिए हर समय उपयोगी है।

"पेरेडिट" नामक एक मोड भी है (http://mumble.net/~campbell/emacs/paredit.el से उपलब्ध) जो उद्धरणों के साथ-साथ अन्य सामानों के लिए भी इस तरह की चीज करता है।

+0

मेरे कॉन्फ़िगरेशन में, 'एम-)' 'move-past-close-and-reindent' 'के लिए बाध्य है, यानी यह एक नई पंक्ति खुलता है। क्या बिना किसी घुसपैठ के संलग्न संलग्नक को पीछे छोड़ने की संभावना है? – phimuemue

+0

'एम-सी-एम-यू 'आप जो चाहते हैं वह कर सकते हैं। – offby1

3

Paredit मोड डिफ़ॉल्ट रूप से बंद करने तत्वों मिलान आवेषण, तो लिखते समय आप printf() कुछ की तरह तो printf("") और कर्सर, कोट के अंदर तैनात किया जाएगा देखेंगे।

0

autopair मामूली मोड बिल्कुल वही करता है जो आप पूछते हैं।

2

यहां मेरे 5 सेंट भी हैं।

(defadvice delete-backward-char (before delete-empty-pair activate) 
    (if (eq (cdr (assq (char-before) skeletons-alist)) (char-after)) 
     (and (char-after) (delete-char 1)))) 

अगला सलाह backward-kill-word कर देगा (मेरे लिए एम बैकस्पेस है)> अब - ख | एक():

(setq skeleton-pair t) 
(defvar skeletons-alist 
    '((?\(. ?\)) 
    (?\" . ?\") 
    (?[ . ?]) 
    (?{ . ?}) 
    (?$ . ?$))) 

(global-set-key (kbd "(") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "[") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "\"") 'skeleton-pair-insert-maybe) 
(global-set-key (kbd "\'") 'skeleton-pair-insert-maybe) 

अगला सलाह जोड़े को हटा देता है के लिए बैकस्पेस सक्षम हो जाएगा मिलान पाठ को हटाने के लिए भले ही यह अन्य पाठ से अलग हो; बेहद सुविधाजनक।

(defadvice backward-kill-word (around delete-pair activate) 
    (if (eq (char-syntax (char-before)) ?\() 
     (progn 
(backward-char 1) 
(save-excursion 
    (forward-sexp 1) 
    (delete-char -1)) 
(forward-char 1) 
(append-next-kill) 
(kill-backward-chars 1)) 
    ad-do-it)) 

मैं अब paredit है, हालांकि स्थानांतरित करने के लिए कोशिश कर रहा हूँ।

+0

चूंकि ऑटोपैयर स्वचालित रूप से जोड़े को हटाने की प्रतीत नहीं होता है, इसलिए पीछे की तरफ जोड़े की सलाह एक महान पूरक की तरह दिखती है। – beardc

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