सभी ऑटो-इंडेंटेशन को पूरी तरह से अक्षम करें


18

मैं Emacs में सभी ऑटो-इंडेंटेशन को पूरी तरह से कैसे अक्षम कर सकता हूं? मुझे इसे कम से कम फंडामेंटल मोड के लिए अक्षम करने की आवश्यकता है, लेकिन मैं चालू सत्र के लिए विश्व स्तर पर इसे अक्षम कर रहा हूं।

इसे डुप्लिकेट घोषित करने से पहले कृपया शेष प्रश्न पढ़ें। अन्य सभी उत्तर जो मुझे मिले हैं वे इंडेंटेशन को अक्षम करने के लिए बहुत अधिक लक्षित हैं। मैं वास्तव में पूरे सत्र के लिए सभी ऑटो-इंडेंटेशन को पूरी तरह से अक्षम करना चाहता हूं।

काम electric-layout-modeकरने के लिए सेटिंग nilनहीं है।

विवरण

कभी-कभी मैं अपने विंडोज ASCII टेक्स्ट एडिटर के साथ बड़े Git कमिट मेसेज लिखना पसंद करता हूं। इन संदेशों में अक्सर बुलेट सूची, कोड ब्लॉक या अन्य चीजें होती हैं, जहां मेरे स्रोत दस्तावेज़ में सटीक स्वरूपण सार्थक होता है। मेरा कोडबेस लिनक्स पर है, और मैं केवल-पाठ SSH क्लाइंट का उपयोग करके बॉक्स से कनेक्ट करता हूं। जब Git कमिट मैसेज को एडिट करने के लिए Emacs में प्रवेश करता है, तो मैं विंडोज क्लिपबोर्ड में सोर्स कमेंट मैसेज को कॉपी करने में सक्षम होना चाहता हूं, फिर इसे विंडोज पेस्ट कमांड का उपयोग करके पेस्ट करें। Emacs के नजरिए से, मैं टाइप कर रहा हूं जो विंडोज टेक्स्ट फाइल में पाया गया था। दुर्भाग्य से, जब Emacs ने इंडेंटेड लाइन्स देखीं, तो यह अपना ऑटो-इंडेंटेशन जोड़ता है, इसलिए मुझे बफर के बाएं किनारे पर व्हॉट्सएप का यह विशाल त्रिकोण मिलता है।

मैं GNU Emacs 24.3.1 का उपयोग कर रहा हूं।

वैकल्पिक हल

मेरा वर्तमान समाधान मेरी Windows पाठ फ़ाइल को एक फ़ाइल सिस्टम में स्थानांतरित करना है जो मेरे लिनक्स होस्ट द्वारा माउंट किया गया है, फ़ाइल को Emacs में लोड करें, फिर सामग्री को स्थानांतरित करने के लिए किल और यैंक का उपयोग करें। यह थोड़ा क्लूनी है।

उदाहरण

यहां पाठ का एक उदाहरण ब्लॉक दिया गया है:

a

  - b
    c
    d

जब मैं एमएसीडब्ल्यू पेस्ट के माध्यम से एमएसीएस-अंडर-एसएच में पेस्ट करता हूं तो यहां यह दिखाया गया है:

a

  - b
      c
          d

यदि मैं C-h lपेस्ट करने के बाद दबाता हूं , तो यहां वही है जो मैं देख रहा हूं। ध्यान दें कि newlines इनपुट का उपयोग कर रहे हैं C-j, नहीं RET

a C-j C-j SPC SPC - SPC b C-j SPC SPC SPC SPC c C-j
SPC SPC SPC SPC d C-j C-h l

कुछ इंडेंट संबंधित वैरिएबल बफर-लोकल होने के साथ-साथ, कुछ ऐसा भी होना चाहिए जो प्रमुख-मोड हुक के बाद चलता हो - जैसे, शायद [?] hack-local-variables-hook- अनिवार्य रूप से पूर्ववत करने के लिए कि अन्य प्रमुख-मोड उनके हिस्से के रूप में क्या सेट करते हैं? मानक आरंभीकरण। fundamental-modeअंदर एक छोटा सा काम है simple.el- यानी (kill-all-local-variables) (run-mode-hooks)M-x find-function RET fundamental-mode RET- आप आवश्यकतानुसार अपना स्वयं का संशोधन / निर्माण कर सकते हैं; हालाँकि, यदि आप नाम बदलते हैं, तो इसका उपयोग कुछ कार्यों द्वारा नहीं किया जाएगा - इसलिए समान नाम रखने पर विचार करें।
कानूनन


क्या Emacs में vim का समकक्ष है :set paste? यह मूल रूप से कहता है "किसी भी तरह से चिपकाए गए पाठ को न छुएं"। जिसमें ऑटो-इंडेंटेशन भी शामिल है।
ओमेयर माजिद

जवाबों:


21

एमएसीएस ≤24.3

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

यूनिक्स टर्मिनलों में आमतौर पर एक कैरिज रिटर्न चरित्र होता है, जब क्लिपबोर्ड सामग्री में एक नई रेखा (रेखा फ़ीड वर्ण द्वारा दर्शाई गई) होती है। Emacs में, जैसे एक गाड़ी वापसी दिखता RETकुंजी (वास्तव में, RET है , जबकि तरह की एक पंक्ति फ़ीड दिखता है (है) गाड़ी वापसी चरित्र) C-j

हालाँकि, आपके मामले में, एक newline परिणाम को चिपकाने में C-j, जो Emacs में कमांड के लिए बाध्य है newline-and-indent। जैसा कि नाम से संकेत मिलता है, यह आदेश संकेत देता है। मुझे नहीं पता कि क्या पुटी की कोई सेटिंग है जिसे आप बदल सकते हैं। यदि आप Emacs के अंत में समस्या को ठीक करना चाहते हैं, तो एक आसान समाधान है, जो मुझे लगता है कि आप बुरा नहीं मानेंगे: (उसी ) C-jको बांधें ।newlineRET

(global-set-key "\C-j" 'newline)

एमएसीएस ac24.4

एमएसीएस 24.4 में, इलेक्ट्रिक इंडेंट मोड डिफ़ॉल्ट रूप से स्विच किया जाता है। यह एक वैश्विक मामूली विधा है, इसलिए आप इसे कॉल करके हर जगह बंद (electric-indent-mode 0)कर सकते हैं और आप इसे अंतःक्रियात्मक रूप से टॉगल कर सकते हैं M-x electric-indent-mode RET

आप इस जानकारी को मैनुअल (या Returnप्रेस C-h k RET) द्वारा निर्दिष्ट कमांड के दस्तावेज को देखकर पा सकते हैं ।

आप इसे एक विशिष्ट बफर में चालू कर सकते हैं electric-indent-local-mode। कुछ प्रोग्रामिंग मोड (विशेषकर थर्ड-पार्टी वाले) की अपनी स्वत: इंडेंटेशन सुविधाएँ हो सकती हैं जो इलेक्ट्रिक इंडेंट मोड की सेटिंग्स का पालन नहीं करती हैं।


electric-indent-modeडिफ़ॉल्ट रूप से अक्षम है (यह आपके द्वारा कहे गए के अनुरूप है क्योंकि मैं Emacs 24.3.1 का उपयोग कर रहा हूं)। इस पर टॉगल करना और बंद करना मदद नहीं करता है। electric-indent-local-modeमेरे माध्यम से उपलब्ध नहीं है M-x। पर सहायता RETतीन सेटिंग्स का उल्लेख है: use-hard-newlines, auto-fill-function, और fill-column। टॉगल करने से या के माध्यम से उन को संशोधित करने M-x use-hard-lines, M-x auto-fill-modeऔर M-x set-fill-column RET 0 RETमदद नहीं है।
श्री फूज

@MrFooz ओह, क्षमा करें, मैंने आपके प्रश्न में Emacs संस्करण पर ध्यान नहीं दिया था। लेकिन तब मुझे आश्चर्य होता है कि आपको स्वचालित इंडेंटेशन क्यों मिल रहा है। हममम। क्या आपको स्वत: इंडेंटेशन मिलता है emacs -q? कृपया कुछ लघु पाठ पेस्ट करें जिसमें एक नई लाइन ( fooन्यूलाइन कहें bar) को Emacs में दबाएं और C-h lदेखें, आप क्या देखते हैं? … f o o RET b a rया … f o o C-j b a rया … f o o RET C-j barकुछ और? आप SSH क्लाइंट को किस टर्मिनल में चलाते हैं?
गिल्स एसओ- बुराई को रोकना '

मैंने मूल पोस्ट में एक उदाहरण टेक्स्ट ब्लर्ब जोड़ा है। जोड़ना -qमदद नहीं करता है (जैसे emacs -q -nw --no-desktop)। मैं इसके C-jबजाय देखता हूं RET। मैं अपने SSH क्लाइंट के रूप में PuTTY 0.63 का उपयोग कर रहा हूं। मैं TERMसेट screenऔर के साथ समान व्यवहार देखता हूं xterm
श्री फ़ूज

@MrFooz ठीक है, चूंकि PuTTY सीआर के बजाय LF भेज रहा है, आपको Emacs को LF पर इंडेंट न करने का निर्देश देने की आवश्यकता है। विश्व स्तर पर इसे बंद करना आसान है, मैंने अपना उत्तर संपादित कर लिया है।
गिल्स एसओ- बुराई को रोकना '

धन्यवाद, global-set-keyहैक ने समस्या को ठीक कर दिया। मैं अपने EDITORएलियास को सेटअप करने का एक तरीका बताऊंगा कि Git कमिट मैसेजेस को एडिट करते समय अपने आप इसे स्टार्टअप पर इनवॉइस करें। कैरिज रिटर्न के बजाय नई सूचियों को चिपकाया जा रहा है क्योंकि मैंने अपने पसंदीदा विंडोज टेक्स्ट एडिटर को विंडोज के बजाय UNIX- स्टाइल लाइन एंडिंग्स का उपयोग करने के लिए कॉन्फ़िगर किया है।
श्री फूज

1

आप ब्रैकेटेड पेस्ट मोड भी आज़मा सकते हैं। यह आपके टर्मिनल एमुलेटर की एक विशेषता है (इस मामले में PuTTY, संस्करण 0.63 और ऊपर) जो संकेत अनुक्रम से बचने के लिए उपयोग करता है कि उपयोगकर्ता कुछ चिपका रहा है, और फिर जब पेस्ट समाप्त हो जाता है। वहाँ एक Emacs पैकेज है जिसे bracketed-pasteआप इंस्टॉल कर सकते हैं, यह Emacs को पेस्ट की अवधि के लिए सुरक्षित सीमैप में संक्रमण और संक्रमण को पहचानने में सक्षम बनाता है। इतना ही नहीं यह इंडेंटेशन को गड़बड़ होने से रोकता है, यह आपके इमैक सेशन में एक दुष्ट पेस्ट को रनिंग कमांड को इस्तेमाल करने से रोकता है M-x

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