टेक्स्ट मोड में Emacs में 4 स्पेस इंडेंट सेट करें




indentation (13)

प्रमुख मोड text-mode साथ बफर में टैब दबाते समय मैं Emacs को 8 स्पेस टैब से 4 स्पेस टैब पर स्विच करने में असफल रहा हूं। मैंने अपने .emacs में निम्नलिखित जोड़ दिया है:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)

;;; And I have tried
(setq indent-tabs-mode nil)
(setq tab-width 4)

इससे कोई फर्क नहीं पड़ता कि मैं अपनी .emacs फ़ाइल (या मेरे बफर के स्थानीय चर) को कैसे बदलता हूं, टैब बटन हमेशा एक ही काम करता है।

  1. यदि ऊपर कोई पाठ नहीं है, तो 8 रिक्त स्थान इंडेंट करें
  2. यदि पिछली पंक्ति पर टेक्स्ट है, तो दूसरे शब्द की शुरुआत में इंडेंट करें

जितना ज्यादा मैं Emacs प्यार करता हूँ यह परेशान हो रहा है। क्या पिछली पंक्ति में टेक्स्ट नहीं होने पर Emacs को कम से कम 4 स्थान पर इंडेंट करने का कोई तरीका है?


संक्षिप्त जवाब:

मुख्य बिंदु यह है कि इंडेक्स को इंडेंट-लाइन-फ़ंक्शन को बदलकर जो कुछ भी आप चाहते हैं उसे सम्मिलित करने के लिए कहें। टैब को सम्मिलित करने के लिए इसे बदलना आसान है और फिर 4 रिक्त स्थान डालने के लिए इसे बदलने से टैब को 4 रिक्त स्थान में बदलें। निम्नलिखित कॉन्फ़िगरेशन आपकी समस्या का समाधान करेगा:

(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)

स्पष्टीकरण:

मेजर मोड @ emacs मैन्युअल द्वारा नियंत्रित इंडेंटेशन से:

प्रत्येक प्रमुख मोड का एक महत्वपूर्ण कार्य भाषा संपादित करने के लिए उचित रूप से इंडेंट करने के लिए कुंजी को कस्टमाइज़ करना है।

[...]

इंडेंट-लाइन-फ़ंक्शन वैरिएबल वर्तमान लाइन को इंडेंट करने के लिए (और विभिन्न आदेश, जैसे इंडेंट-क्षेत्र को कॉल करते समय) द्वारा उपयोग किया जाने वाला फ़ंक्शन है। आदेश इंडेंट-टू-टू-मोड इस फ़ंक्शन को कॉल करने से अधिक नहीं करता है।

[...]

डिफ़ॉल्ट मान कई तरीकों के लिए इंडेंट-रिश्तेदार है।

इंडेंट-रिश्तेदार @ emacs मैनुअल से:

इंडेंट-रिश्तेदार स्पेस पिछले गैर-रैंक लाइन में अगले इंडेंट पॉइंट के नीचे है।

[...]

यदि पिछले गैरब्लैंक लाइन में कॉलम पॉइंट से परे कोई इंडेंट पॉइंट नहीं होता है, तो इसके बजाय 'टैब-टू-टैब-स्टॉप' किया जाता है।

बस इंडेंट-लाइन-फ़ंक्शन के मान को सम्मिलित करें-टैब फ़ंक्शन में बदलें और टैब प्रविष्टि को 4 रिक्त स्थान के रूप में कॉन्फ़िगर करें।


आप कोड की इन पंक्तियों को अपनी .emacs फ़ाइल में जोड़ सकते हैं। यह इंडेंट-रिश्तेदार के बजाय सम्मिलित-टैब का उपयोग करने के लिए टेक्स्ट मोड के लिए एक हुक जोड़ता है।

(custom-set-variables
 '(indent-line-function 'insert-tab)
 '(indent-tabs-mode t)
 '(tab-width 4))
(add-hook 'text-mode-hook
      (lambda() (setq indent-line-function 'insert-tab)))

मुझे उम्मीद है यह मदद करेगा।


आपने कोशिश की है

(setq  tab-width  4)

इसे अपनी .emacs फ़ाइल में जोड़ें:

यह चौड़ाई निर्धारित करेगा कि एक टैब 2 अक्षरों पर प्रदर्शित होता है (जो भी आप चाहते हैं उसे नंबर 2 बदलें)

(setq default-tab-width 2)

यह सुनिश्चित करने के लिए कि emacs वास्तव में रिक्त स्थान के बजाय टैब का उपयोग कर रहा है:

(global-set-key (kbd "TAB") 'self-insert-command)

एक तरफ, एक टैब पर बैकस्पेसिंग करते समय emacs के लिए डिफ़ॉल्ट इसे रिक्त स्थान में परिवर्तित करना है और फिर एक स्थान हटा देना है। यह परेशान हो सकता है। यदि आप इसे टैब को हटाना चाहते हैं, तो आप यह कर सकते हैं:

(setq c-backspace-function 'backward-delete-char)

का आनंद लें!


कस्टमाइज़ेशन छाया (setq tab width 4) कर सकते हैं, या तो setq-default उपयोग करें या अनुकूलित करें कि आप क्या कर रहे हैं अनुकूलित करें। मेरे पास ओपी के समान मुद्दे भी थे और इसे अकेले इसके साथ तय किया गया था, tab-stop-list या किसी भी insert कार्यों को समायोजित करने की आवश्यकता नहीं थी:

(custom-set-variables
 '(tab-width 4 't)
 )

इसे तुरंत जोड़ने के लिए उपयोगी पाया (emacsWiki से एक टिप):

(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

बस सी-सेट-शैली के साथ शैली बदलना मेरे लिए पर्याप्त था।


यह एकमात्र समाधान है जो किसी भी टैब को रिक्त स्थान पर टैब के अनुक्रम या रूपांतरण के बिना, मेरे लिए कभी भी डालने से रोकता है। वे दोनों पर्याप्त लग रहे थे, लेकिन अपमानजनक:

(setq-default
    indent-tabs-mode nil
    tab-width 4
    tab-stop-list (quote (4 8))
)

ध्यान दें कि quote को काम करने के लिए दो संख्याओं की आवश्यकता है (लेकिन अधिक नहीं!)।

इसके अलावा, अधिकांश प्रमुख मोड (उदाहरण के लिए Python ) में, इंडेक्सेशन Emacs में स्वचालित है। यदि आपको ऑटो इंडेंट के बाहर इंडेंट करने की आवश्यकता है, तो इसका उपयोग करें:

एम - i


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

(परिभाषित कुंजी टेक्स्ट-मोड-मैप (केबीआई "टैब") 'टैब-टू-टैब-स्टॉप)


वैसे, सी-मोड के लिए , मैं (setq-default c-basic-offset 4) basic- (setq-default c-basic-offset 4) जोड़ता हूं। विवरण के लिए http://www.emacswiki.org/emacs/IndentingC देखें।


सर्वोत्तम जवाब तब तक काम नहीं करते जब तक कि मैंने इसे .emacs फ़ाइल में लिखा था:

(global-set-key (kbd "TAB") 'self-insert-command)

(customize-variable (quote tab-stop-list))

या .emacs फ़ाइल में कस्टम-सेट-चर में टैब-स्टॉप-सूची प्रविष्टि जोड़ें:

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(tab-stop-list (quote (4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 100 104 108 112 116 120))))

(setq tab-width 4)
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80))
(setq indent-tabs-mode nil)

(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)






indentation