Emacs

2008-12-05 13 views
5

में बेहतर टैब मैं emacs में खराब डिफ़ॉल्ट टैबबिंग योजना को ओवरराइड करना चाहता हूं ताकि यह अधिकतर अन्य संपादकों (ग्रहण, नोटपैड ++) की तरह काम करे। मैं इसे सेट करना चाहता हूं ताकि मोड की परवाह किए बिना, टैब एक टैब डालेगा, और एंटर दबाकर मुझे मेरी वर्तमान टैब गहराई पर रखेगा।Emacs

मैं इस कोशिश की, लेकिन यह कुछ भी नहीं करता है:

(global-set-key (kbd "TAB") 'tab-to-tab-stop) 
(setq default-tab-width 4) ;; 8 is way too many 
+0

कुछ प्रमुख मोड इसे ओवरराइड कर सकते हैं। क्या आप पर्यावरण के बारे में और अधिक कह सकते हैं? – dmckee

+2

मैं वास्तव में सभी वातावरणों के लिए इसे प्राप्त करने का लक्ष्य रख रहा हूं। यह वास्तव में मुझे परेशान करता है जब यह फैसला करता है कि यह मुझसे बेहतर जानता है, और कृपया मुझे इंडेंट करने की इजाजत देने से इंकार कर देता है। जैसे। अपाचे कॉन्फ़िगरेशन में यह मुझे 1, 8 चार टैब की अनुमति देता है, और आगे नहीं। elisp मोड sane है, लेकिन सामान्य के साथ असंगत है। – AlexH

+0

यदि यह केवल एक 8-वर्ण टैब की अनुमति देता है, तो फिक्स को बदलना * है *, बदलें कि उसका टैब बंद हो गया है। (या इंडेंट फ़ंक्शन को बदलें।) – ShreevatsaR

उत्तर

9

Enter कुंजी अगली पंक्ति के लिए ले और यह अपने आप को इंडेंट बनाने के लिए, आप अपने .emacs में

(global-set-key (kbd "RET") 'newline-and-indent) 

डाल सकते हैं। [या आप एंटर के बजाय C-j हिट कर सकते हैं।] एक बार आपके पास ऐसा होने के बाद, आपको कभी भी टैब को मैन्युअल रूप से सम्मिलित करने की आवश्यकता नहीं होगी, क्योंकि Emacs स्वचालित रूप से एक खुली ब्रेस के बाद अतिरिक्त गहराई के लिए एक नई पंक्ति को इंडेंट करता है। यदि आप बदलना चाहते हैं इंडेंटेशन, आप तब तक टैब को हिट कर सकते हैं जब तक कि यह आपको सही इंडेंटेशन पर न ले जाए, फिर वहां से टाइप करना प्रारंभ करें। [और जब आप एक बंद ब्रेस टाइप करते हैं, तो Emacs उस ब्रेस को इंडेंटेशन लेवल के पीछे ले जाने के लिए पर्याप्त स्मार्ट है।]

आपको काम करने के लिए (global-set-key (kbd "TAB") 'tab-to-tab-stop) को हटा देना चाहिए।

1

C-j कि आप Enter दबा से बाहर चाहते न्यू लाइन + मांगपत्र कार्यक्षमता करता है।

7

कई प्रमुख मोड TAB बाइंडिंग को ओवरराइड करते हैं, उदाहरण के लिए सीसी-मोड TAB से 'c-indent-to-column पर बाध्य करता है।

'global-set-key सुझाया गया है कि लगभग हर प्रमुख मोड ने TAB को ओवरराइड नहीं किया है।

एक चाल जो आपके लिए काम कर सकती है वह उस दृष्टिकोण की प्रतिलिपि बनाना है जो 'pabbrev उपयोग करता है, और वैश्विक नाबालिग मोड को परिभाषित करता है जिसमें TAB बाध्य है। तुम कर सकते हो कि इतने की तरह:

(defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode") 
(define-minor-mode just-tab-mode 
    "Just want the TAB key to be a TAB" 
    :global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap 
    (define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command)) 

बहरहाल, यह सब TAB पूरा होने अक्षम करता है। आपको प्रत्येक प्रमुख मोड को एक-एक करके ओवरराइड करके संभवतः सर्वोत्तम परिणाम मिलेंगे (ताकि TAB पूरा होने से बचने के लिए)।

2

यह मुझे भी खराब कर दिया, जब मैंने पहली बार Emacs का उपयोग शुरू किया। हालांकि, मैं इसे प्यार करने आया हूँ। अगर मैं उचित रूप से इंडेंट करना चाहता हूं, तो मैं <tab>; दबाता हूं यदि मैं एक शाब्दिक टैब डालना चाहता हूं, तो मैंने M-i (मेटा और 'i' या - कुछ लंबवत में) tab-to-tab-stop पर बाध्य किया है।

3

मुझे लगता है कि ट्रेय जैक्सन का जवाब शायद आप चाहते हैं, 'indent-for-tab-command के बजाय संभवतः 'self-insert-command का उपयोग करें। मैं व्यक्तिगत रूप से Emacs के डिफ़ॉल्ट व्यवहार को प्राथमिकता देता हूं, लेकिन self-insert-command यह सुनिश्चित करता है कि आपका कोड अच्छी तरह से स्वरूपित है, कुछ भी करने की कोशिश करने के बजाय यह क्या कहता है।

कुछ बार मैं वास्तव में चाहता हूं एक टैब डालने के लिए (इंडेंट नहीं) मैं एम-आई दबाता हूं।

+0

'एम-आई' !!!! महोदय, आपने व्यक्तिगत रूप से मुझे कार्पल सुरंग से बचाया है ... 'नियंत्रण-क्यू ' मेरे बाएं हाथ पर एक टोल लेने शुरू कर रहा था। –

+0

'एम-आई'' टैब-टू-टैब-स्टॉप 'है जो' इंडेंट-टैब-मोड 'सत्य होने पर केवल एक टैब वर्ण डालता है। आपको 'सी-क्यू सी-आई' को 'सी-क्यू टैब' से टाइप करना आसान हो सकता है, हालांकि (विशेष रूप से यदि आपके पास कैप्स लॉक कुंजी को Ctrl कुंजी के रूप में कॉन्फ़िगर किया गया है)। – phils

2

आपको http://github.com/vohrta/regtab पर बनाए गए इस मामूली मोड में रुचि हो सकती है।

यह ऐसा करता है कि जब आप टैब कुंजी दबाते हैं तो टैब टैब (यदि इंडेंट-टैब-मोड शून्य नहीं है) या टैब-चौड़ाई रिक्त स्थान बिंदु पर रखा जाएगा।मोड चयनित टेक्स्ट के क्षेत्र पर नियमित व्यवहार और लाइन की शुरुआत (या लाइनों के सेट) पर टैब को हटाने के लिए शिफ्ट-टैबबिंग पर विचार करने में भी सक्षम है।

आप एम-एक्स regtab-mode दबाकर किसी भी समय इसे सक्षम या अक्षम कर सकते हैं।

+2

आपका लिंक अब और काम नहीं करता है। – user857990