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


159

मैं 8 TABमोड टैब से 4 स्पेस टैब पर स्विच करने में Emacs प्राप्त करने में असफल रहा हूं जब प्रमुख मोड के साथ बफ़र्स में दबा रहा हूं text-mode। मैंने निम्नलिखित को अपने साथ जोड़ा है .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फ़ाइल (या मेरे बफ़र के स्थानीय चर) को कैसे बदलूं TABबटन हमेशा एक ही काम करता है।

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

जितना मुझे Emacs से प्यार है उतना ही गुस्सा आ रहा है। जब पिछली पंक्ति में पाठ नहीं है, तो कम से कम 4 स्थान पर Emacs बनाने का एक तरीका है?


एक मोड लाइन C ++ या csharp- मोड के लिए मैंने (defq csharp-mode () ...) के अंत में (setq c- बेसिक-ऑफसेट 4) जोड़ा (और ...) 1) टैब 8 अक्षरों के बजाय 4 के रूप में दिखाते हैं और (2) जब मैं टैब दबाता हूं तो मुझे एक नई लाइन पर 4 स्थान मिलते हैं।
जेरेड अपडेटाइक जूल

बहुत देर हो चुकी है, लेकिन मुझे अभी पता चला है कि (सेट टैब-चौड़ाई 4) का उपयोग करना काम नहीं करता है, लेकिन यदि आप उपयोग करते हैं (सेट-डिफ़ॉल्ट टैब-चौड़ाई 4) तो आपको कुछ और करने की आवश्यकता नहीं है।
सांबतायन

यदि आप रिक्त स्थान का उपयोग करना चाहते हैं तो मेरा उत्तर देखें लेकिन टैब स्टॉप पर जाएं।
कांटाकवाइट

दूसरों को ध्यान दें कि यह प्रश्न पाया गया है: (setq-default tab-width 4)यह (setq tab-width 4)सुनिश्चित करने के लिए एक ही बात नहीं है कि आप "-डॉफ़्ट" को याद नहीं करते हैं!
२०

10
मुझे विश्वास नहीं हो रहा है कि ऐसा करना बहुत मुश्किल है।
gwg

जवाबों:


30
(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))))

9
टैब-चौड़ाई और टैब-स्टॉप-सूची दोनों की आवश्यकता है। टैब को प्रदर्शित करते समय टैब-चौड़ाई का उपयोग किया जाता है, जबकि टैब स्टॉप-सूची की आवश्यकता होती है जब आप टैब को टैब बंद करते हैं।
माइकल रतनपिन्था

3
कृपया ध्यान दें stackoverflow.com/questions/69934/…
'20:59

5
क्या वास्तव में इससे कम कुछ नहीं है '(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)))? खैर, जब तक यह काम करता है मुझे लगता है ...: P
HelloGoodbye

5
प्रलेखन के अनुसार, आपको उन सभी पदों की आवश्यकता नहीं है। बस ४ others १२ करें और यह अन्य सभी के लिए विस्तारित हो जाएगा (४ जोड़ते रहें)। जाहिरा तौर पर अगर आप 3 के बजाय सिर्फ 1 या 2 तत्वों का उपयोग करते हैं, तो यह अंतिम चरण के रूप में टैब-चौड़ाई का उपयोग करेगा। इसलिए सैद्धांतिक रूप से, यदि मैं चार स्थानों से टैब करना चाहता था, और मेरी टैब-चौड़ाई 4 पर सेट थी। मैं लिख सकता था '(tab-stop-list (quote (4)))
निकोलस पीटरसन

1
@ निचलोलसपर्सन ने ध्यान देने के लिए धन्यवाद! हालांकि ऐसा प्रतीत होता है, कि प्रैक्टिस quoteविज्ञापन क्रम को जारी रखने के लिए दो नंबरों की आवश्यकता है। देखें: stackoverflow.com/a/42148697/2662028
ryanpcmcquen

138

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

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

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

स्पष्टीकरण:

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

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

[...]

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

[...]

डिफ़ॉल्ट मान कई मोड के लिए इंडेंट-सापेक्ष है।

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

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

[...]

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

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


10
मुझे ओपी के रूप में एक ही समस्या है, आपका समाधान मेरे लिए काम नहीं करता है।
गौथियर

कृपया, आगे विस्तार से बताएं। क्या आपका मतलब यह है कि उपरोक्त पंक्तियों का उपयोग केवल आपके .emacs की एकमात्र सामग्री के रूप में और "Mx इंडेंट-अनुसार-से-मोड" के लिए 4 स्थान सम्मिलित नहीं करेगा?
alcortes

3
आपका कन्फ्यूजन मेरे लिए 8 स्पेस सम्मिलित करता है।
व्लादिमीर मिहेलेंको

4
मैं 23.3.1 emacs संस्करण का उपयोग कर रहा हूं और संक्षिप्त उत्तर इसे रिक्त स्थान में नहीं बदलता है। यह उत्तर भ्रामक है।
VNarasimhaM

2
@BruceBarnett मैं पाठ मोड में हूं और ये निर्देश अभी भी काम नहीं करते हैं।
धूप

66

अद्यतन: 24.4 Emacs के बाद से:

tab-stop-listअब इसका अर्थ अनंतता तक है। इसका डिफ़ॉल्ट मान बदल जाता है nilजिसका अर्थ है कि हर tab-widthस्तंभ पर एक टैब बंद हो ।

जिसका अर्थ है कि अब tab-stop-listनीचे दिखाए गए तरीके से सेटिंग करने की कोई आवश्यकता नहीं है , क्योंकि आप इसे सेट कर सकते हैं nil

मूल उत्तर इस प्रकार है ...


यह मुझे हमेशा थोड़ा परेशान करता है जैसे कि (setq tab-stop-list 4 8 12 ................)जब number-sequenceसमारोह वहाँ बैठा हो तो उपयोग होने की प्रतीक्षा में।

(setq tab-stop-list (number-sequence 4 200 4))

या

(defun my-generate-tab-stops (&optional width max)
  "Return a sequence suitable for `tab-stop-list'."
  (let* ((max-column (or max 200))
         (tab-width (or width tab-width))
         (count (/ max-column tab-width)))
    (number-sequence tab-width (* tab-width count) tab-width)))

(setq tab-width 4)
(setq tab-stop-list (my-generate-tab-stops))

यह एकमात्र उत्तर है जो मुझे अपने सिस्टम पर काम करने के लिए मिल सकता है।
कारपोव

emacs इंडेंट कस्टमाइज़्ड पेज कहता है कि टैब सूची "अंतिम चरण की पुनरावृत्ति के माध्यम से अनन्तता तक फैली हुई है" - जिसका अर्थ है एक सूची (4 8) को स्पष्ट संख्या-अनुक्रम के बिना पर्याप्त रूप से अच्छा होना चाहिए
जेम्स वाल्डबी - jppat7

@ JamesWaldby-jwpat7 वास्तव में, यह 24.4 (2014) में हुआ था। NEWS कहता है: " tab-stop-listअब इसे अनंत रूप से बढ़ा दिया गया है। इसका डिफ़ॉल्ट मान शून्य में बदल दिया गया है, जिसका अर्थ है कि हर tab-widthस्तंभ पर एक टैब बंद हो ।" - इसलिए वास्तव में आप केवल डिफ़ॉल्ट मान का उपयोग कर सकते हैं nil
फिल्स

21

आपको अपने टैब सेट करना आसान लग सकता है:

M-x customize-group

पर Customize group:शीघ्र दर्ज indent

आपको एक स्क्रीन दिखाई देगी, जहां आप सभी इंडेंटिंग विकल्प सेट कर सकते हैं और उन्हें वर्तमान सत्र के लिए सेट कर सकते हैं या भविष्य के सभी सत्रों के लिए सहेज सकते हैं।

यदि आप इसे इस तरह करते हैं तो आप एक कस्टमाइज़ेशन फ़ाइल सेट करना चाहेंगे ।


मुझे Mx अनुकूलित-समूह याद रखने की आवश्यकता है - बहुत आसान शॉर्टकट!
निक बोल्टन

11
(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)

10
(defun my-custom-settings-fn ()
  (setq indent-tabs-mode t)
  (setq tab-stop-list (number-sequence 2 200 2))
  (setq tab-width 2)
  (setq indent-line-function 'insert-tab))

(add-hook 'text-mode-hook 'my-custom-settings-fn)

मेरे लिए यह तब काम आया जब इस पृष्ठ पर अन्य नहीं थे।
माइकल टेरी

Emacs में काम करता है26.3
सौरभ

9
(setq-default indent-tabs-mode nil)
(setq-default tab-width 4)
(setq indent-line-function 'insert-tab)
(setq c-default-style "linux") 
(setq c-basic-offset 4) 
(c-set-offset 'comment-intro 0)

यह C ++ कोड और अंदर की टिप्पणी के लिए भी काम करता है


पार्टी के लिए देर से, लेकिन धन्यवाद। मैं इस बात की थाह नहीं लगा सकता कि क्यों emacs को अपने इंडेंटेशन नियमों को C / C ++ कोड पर लागू करने के लिए विशिष्ट निर्देशों की आवश्यकता होगी। मैं भविष्य में vim देख रहा हूँ ...
MegaWidget 3

मैं खुद से यह सवाल पूछना चाहता हूं कि मैं इसे समझ सकता हूं। अगर मैं कर सकता तो मैं इसे एक इनाम देता। मैं बहुत, बहुत परेशान था कि एक बदलाव 4 पर टैब करने के लिए तैयार नहीं किया गया था, इस पृष्ठ पर सभी समाधानों के माध्यम से जा रहा था, और आपने मुझे बहुत अधिक काम बचा लिया है!
टॉपोलॉजिकल सॉर्ट

7

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

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


6

इसे इस्तेमाल करे:

(add-hook 'text-mode-hook
  (function
   (lambda ()
     (setq tab-width 4)
     (define-key text-mode-map "\C-i" 'self-insert-command)
     )))

यह TAB को हमेशा एक शाब्दिक TAB वर्ण सम्मिलित करेगा जिसमें टैब 4 अक्षरों को रोकता है (लेकिन केवल पाठ मोड में)। यदि वह नहीं है जो आप पूछ रहे हैं, तो कृपया उस व्यवहार का वर्णन करें जिसे आप देखना चाहते हैं।


4
मुझे लगता है कि ओपी टैब के बजाय रिक्त स्थान चाहते हैं (इसलिए टैब आवेषण 4 स्थानों को मार रहा है)।
मियादी

एक्वामाक्स 2.4 के साथ संयोजन में, यह विशेष उत्तर मुझे एक टैब के बजाय दूसरी भाषा में वर्ण देता है: am। यदि टैब कुंजी को एक से अधिक बार दबाया जाता है, तो इसका परिणाम है: press (बिना किसी अलगाव के)। और वही क्रमिक टैब प्रेस के लिए सही है।
लॉस्टल

6

आप अपने .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)))

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



4

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

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

(setq default-tab-width 2)

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

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

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

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

का आनंद लें!


प्रश्न में कम से कम 4 रिक्त स्थान को पूरा नहीं करता है।
किमी।

2

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

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

ध्यान दें कि quote काम करने के लिए दो नंबर चाहिए (लेकिन अधिक नहीं!)।

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

M-i


2

अनुकूलन (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)

1

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

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

0

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

(setq  tab-width  4)

2
उनके पास यह सवाल है, इसलिए हां, यह मान लेना सुरक्षित है कि उन्होंने इसकी कोशिश की।
ryanpcmcquen



0

मेरी इनिट फ़ाइल से, अलग-अलग क्योंकि मैं टैब के बजाय रिक्त स्थान चाहता था:

(ऐड-हुक 'एसक्यूएल-मोड-हुक
          (लंबोदर)
             (progn
               (सेट-डिफ़ॉल्ट टैब-चौड़ाई ४)
               (सेट इंडेंट-टैब-मोड नील)
               (सेट इंडेंट-लाइन-फ़ंक्शन 'टैब-टू-टैब-स्टॉप) 
               (संशोधित-वाक्य-प्रविष्टि; _ "w"); अब '_' शब्द-परिसीमन नहीं माना जाता है
               (संशोधित-वाक्य-प्रविष्टि; - "w"); अब '-' को शब्द-परिसीमन नहीं माना जाता है
               )))

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.