2009-05-05 12 views
22

मैं सिर्फ emacs के लिए एक महसूस करने के लिए शुरू कर रहा हूँ, लेकिन जब मैं रिटर्न कुंजी दबाता हूं तो मैं इंडेंट नहीं करने की प्रवृत्ति से निराश हूं। मुझे पता है कि अगर मैं सी-जे दबाता हूं तो यह करेगा, लेकिन मैं उस आदत में नहीं जा सकता। मैं बस नहीं कर सकता मुझे वापसी पर हिट करने की ज़रूरत है, और मुझे हर बार फिर से टैब्स करने से नफरत है।मैं Emacs को अपने सी कोड को इंडेंट कैसे कर सकता हूं?

मैं विकल्पों में गया और सी मोड हुक, और सी ++ मोड हुक, आदि पाया - और उन्होंने दो कीमैपिंग्स (10 और 13 परिभाषित किया, और मुझे याद आया कि 0 ए और 0 डी सीआर/एलएफ हैं क्योंकि मैंने उन्हें बहुत उपयोग किया असेंबली में) - मुझे लगा कि एक ने कहा "(lambda nil (define-key lisp-mode-map [13] (quote newline-and-indent))" और दूसरा वही है लेकिन (quote newline) के साथ, मैंने बस इसके अंत में एंड इंडेंट डाला और लगा कि यह काम करेगा।

लेकिन यह नहीं करता है: मैंने इसे सेट और सहेजा, कोशिश की, इसका कोई फायदा नहीं हुआ। पुनरारंभ emacs, अभी भी कोई सफलता नहीं है। मैं इसे अपना कोड कैसे इंडेंट कर सकता हूं? यह बहुत पागल है कि emacs को अपनी बुनियादी जरूरतों के लिए इसे कॉन्फ़िगर करने के लिए lisp में डिग्री की आवश्यकता होती है।

इसके अलावा, एक तरह के पक्ष प्रश्न के रूप में: मैं क्लिपबोर्ड से कैसे कॉपी और पेस्ट कर सकता हूं? हत्या/यांकिंग आसान है और सब कुछ मुझे संपादन करने से नफरत है-> हर बार जब मैं कहीं और पेस्ट करना चाहता हूं तो प्रतिलिपि बनाएँ।

- संपादित करें -

ठीक है, मैं अपने .emacs में निम्नलिखित लाइनों रख दिया और यह काम किया: मदद

+4

"लिस्प डिग्री" के बारे में क्यों rant? emacs में, आपको सब कुछ कॉन्फ़िगर करने के लिए विकल्प (!) करना होगा। और इसके साथ दिमाग में, लिस्प उस समय एक बहुत अच्छा निर्णय था। एरा के आधार पर, जब emacs का आविष्कार किया गया था। आधुनिक आईडीई निर्देशित करते हैं, आप क्या बदल सकते हैं और आप क्या नहीं कर सकते हैं, इसलिए कोई निर्णय ले सकता है कि काम करने का उनका ढेर क्या है ... –

+1

मेरी निराशा व्यक्त करने के लिए एक असाधारणता, मुझे पता था कि एमएसीएस lisp (या elisp या जो कुछ भी) के साथ प्रोग्राम करने योग्य था लेकिन मुझे उम्मीद नहीं थी कि यह एक आवश्यकता होगी - मैंने सोचा था कि खिड़की वाले मोड में कुछ सरल सेटिंग्स के लिए एक अग्रभाग हो सकता है। जब आप एंटर दबाते हैं तो इंडेंट की तरह। –

+6

"क्यों रान?" पीटर, क्या आप एक विन्यास तंत्र के रूप में elisp की उपयोगिता गंभीरता से बचाव कर रहे हैं? ही ही! – Cheeso

उत्तर

14

के रूप में वहाँ का सुझाव दिया, अपने .emacs में निम्न कोड डालें emacswiki - autoindent

पर एक नज़र डालें

(defun set-newline-and-indent() 
    (local-set-key (kbd "RET") 'newline-and-indent)) 
(add-hook 'c-mode 'set-newline-and-indent) 

आप परिवर्तनीय सी डिफ़ॉल्ट स्टाइल को कस्टमाइज़ कर सकते हैं। अपने emacs में विकल्प-> Emacs-> विशिष्ट विकल्प को अनुकूलित करें, फिर c-default-style टाइप करें और अपनी पसंद पर सेट करें। ऐसा करके, आपको टैब को हिट करने की आवश्यकता नहीं है। लाइन की शुरुआत से टाइप करें और जैसे ही आप ";" दबाएं , यह स्वचालित रूप से इंडेंट किया जाएगा। चाल शुरू करने के लिए, Ctrl-Space,, एएलटी-W

चिपकाने अंत में चले: यूनिक्स पर CTRL-y

: बाईं माउस कॉपी करने के लिए, सही

आशा इस

+0

सी-डिफॉल्ट-स्टाइल विकल्प ने मुझे चेकबॉक्स के पीछे भाषाओं की एक सूची दी, और भाषा के नाम के बाद, नाम टाइप किया गया था ... मुझे समझ में नहीं आता कि यह सीआर को न्यूलाइन-एंड-इंडेंट –

+0

कहता है परिवर्तनीय इंडेंटेशन शैली सेट करता है; कई सी-जैसी भाषाओं के लिए सीसी मोड का उपयोग किया जाता है, और आप प्रत्येक भाषा के लिए इंडेंटेशन की शैली निर्धारित कर सकते हैं। शैलियों के बारे में जानने के लिए दोस्ताना मैनुअल पढ़ें। –

1

कोशिश [दर्ज] के लिए

(add-hook 'c-mode-common-hook (lambda() 
     (local-set-key (kbd "RET") 'newline-and-indent)))

धन्यवाद, (kbd "enter") या (read-kbd-macro "enter"), वे सभी अलग-अलग चीजें करते हैं;)

इसके अलावा, मेरे लिए कॉपी/पेस्टिंग सिर्फ काम करता है। क्या आप emacs -q चलाने का प्रयास कर सकते हैं, और देख सकते हैं कि यह काम करता है या नहीं? यदि ऐसा होता है, तो यह आपके .emacs में समस्या हो सकती है।

मैं भी है:

(when window-system 
    ;; use extended compound-text coding for X clipboard 
    (set-selection-coding-system 'compound-text-with-extensions)) 

लेकिन यह है कि कुछ और हो सकता है;)

0

नकल में मदद करता है माउस

6

चिपकाने के लिए अन्य सुझावों के अलावा, ऑटो न्यू लाइन सुविधा चालू करने के लिए इतना है कि अपने modeline पढ़ता C/laC-c C-a प्रयास करें। फिर आपको अधिकांश समय दर्ज करने की भी आवश्यकता नहीं है; इसके बजाय, जब आप अर्धविराम या ब्रेस टाइप करते हैं, तो न्यूलाइन डाली जाती है और आपका कोड इंडेंट हो जाता है।कभी-कभी आपको एंटर दबाए जाने की आवश्यकता होती है, और आपको ऑटोइंडेंशन नहीं मिलता है (जब तक कि आप किसी अन्य उत्तर में सुझाए गए RET को दोबारा नहीं देते) लेकिन यदि आप अभी भी अगली पंक्ति टाइप करना शुरू करते हैं, तो आप देख सकते हैं कि जब आप कुछ टाइप करते हैं तो यह ठीक से इंडेंट हो जाता है विराम चिह्न चरित्र। (; निर्देशिका के लिए प्रकार d और वहाँ सीसी मोड लगता है यह Emacs के लिए नोड से अलग है)

अपने "लिस्प डिग्री", प्रकार C-h i जानकारी ब्राउज़र के लिए और "सीसी मोड" के लिए नोड के लिए जाना के साथ आरंभ करने के लिए ।

मेरे लिए
(global-set-key "\C-m" 'newline-and-indent) 

काम करता है:

17

मैं अपने ~/.emacs फ़ाइल में एक नई लाइन और इरादे के रूप में कार्य विश्व स्तर पर वापस कुंजी निर्धारित किया है।

+0

मैंने इसे ऊपर उठाया, क्योंकि स्वीकृत उत्तर मेरे लिए काम नहीं करते हैं, जबकि यह करता है। मुझे नहीं पता कि ऐसा इसलिए है क्योंकि मैं Emacs 23 या क्या उपयोग कर रहा हूं, लेकिन (kbd "आरईटी") का उपयोग करके मुझे हमेशा "अमान्य फ़ंक्शन" मिलता है। –

5

आप पूरे C/C++ फ़ाइल इंडेंट करने के लिए चाहते हैं, तो आप सिर्फ कर

  1. निशान सब कुछ: Ctrl-x ज
  2. टैब दबाएं

, यही कारण है कि btw, के लिए भी काम करता है एक्सएमएल, पायथन कोड और अन्य प्रकार।

0

ऐसा करने का आसान तरीका electric-indent-mode का उपयोग करना है। आप इसे मैन्युअल रूप से सक्षम करना चाहते हैं, बस

M-x electric-indent-mode 

करना है ताकि इसे स्वचालित रूप से सक्षम करने के लिए, मान लें कि आपका .emacs में निम्नलिखित:

(electric-indent-mode) 

यह Emacs 24.4 में डिफ़ॉल्ट होगा।

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

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