2012-03-14 13 views
12

क्या कोई तरीका है कि मैं emacs में टेक्स्ट को चिह्नित कर सकता हूं और स्पेस/टैब ग्रैन्युलरिटी द्वारा इसे बायीं ओर ले जा सकता है (प्रारंभिक रिक्त स्थान हटा रहा हूं)?कुछ पंक्तियों पर इंडेंटेशन घटाएं

उसी तरह से मैं Shift + Tab के साथ किसी अन्य संपादक पर करता हूं।

+0

मुझे यकीन है कि मैं तुम क्या मतलब है नहीं कर रहा हूँ है। क्या आप कृपया अपनी व्याख्या विस्तृत कर सकते हैं? –

+0

कई emacs मोड में स्वचालित इंडेंटेशन होता है - जब आप लाइन पर कहीं भी [टैब] हिट करते हैं तो यह उस रेखा को इंडेंट करेगा जहां यह होना चाहिए। मुझे शायद ही कभी कुछ भी इंडेंट करने के बारे में चिंता करने की ज़रूरत है - मैं सिर्फ संपादक को मेरे लिए काम करने देता हूं। –

+0

मैं "टैब" के विपरीत करने में सक्षम होना चाहता हूं; मुझे आमतौर पर आवश्यकता होती है जब मैं प्रतिलिपि कोड को दूसरी फ़ाइल से अलग-अलग स्थान पर रखता हूं। – sramij

उत्तर

3

आम तौर पर उन चीजों को emacs करता है जहां वर्तमान शैली <TAB> पर हिट करते समय निर्देशित करती है, इसलिए स्वाभाविक रूप से यह यहां थोड़ा अलग है। दिमाग में आने वाली सबसे नज़दीकी चीज M-\ है जो बिंदु के चारों ओर क्षैतिज सफेद जगह को ध्वस्त कर देती है। यदि आप लाइनों से पहले अंतरिक्ष के "आयताकार" को हटाना चाहते हैं, तो delete-rectangle अधिक उचित हो सकता है, जो आप आयताकार का चयन करने के लिए चिह्न और चलती बिंदु सेट करके और C-x r d का उपयोग करके कर सकते हैं।

1

ऐसा लगता है कि जिस समस्या को आप हल करने का प्रयास कर रहे हैं वह कोड का गलत इंडेंटेशन है जब आप काटने/पेस्ट कर रहे हैं। आप इसे हल करने के साथ स्वचालित रूप से टेक्स्ट को पुनः इंडेंट करके हल कर सकते हैं।

नोट: एक उपसर्ग तर्क बलों कोई फिर से खरोज (सी-यू सी-y), के साथ साथ वहाँ आकार सीमा चर है का उपयोग करना।

;; automatically indenting yanked text if in programming-modes 
(defvar yank-indent-modes '(emacs-lisp-mode 
          c-mode c++-mode 
          tcl-mode sql-mode 
          perl-mode cperl-mode 
          java-mode jde-mode 
          lisp-interaction-mode 
          LaTeX-mode TeX-mode) 
    "Modes in which to indent regions that are yanked (or yank-popped)") 

(defvar yank-advised-indent-threshold 1000 
    "Threshold (# chars) over which indentation does not automatically occur.") 

(defun yank-advised-indent-function (beg end) 
    "Do indentation, as long as the region isn't too large." 
    (if (<= (- end beg) yank-advised-indent-threshold) 
     (indent-region beg end nil))) 

(defadvice yank (after yank-indent activate) 
    "If current mode is one of 'yank-indent-modes, indent yanked text (with prefix arg don't indent)." 
    (if (and (not (ad-get-arg 0)) 
      (member major-mode yank-indent-modes)) 
     (let ((transient-mark-mode nil)) 
     (yank-advised-indent-function (region-beginning) (region-end))))) 
+0

मुझे यकीन है कि यह कोड अच्छी तरह से काम करता है, लेकिन [auto-indent-mode.el] (https://github.com/mlf176f2/auto-indent-mode.el/) सक्रिय रूप से बनाए रखा गया है और इसमें अधिक कार्यक्षमता है। हालांकि थ्रेसहोल्ड एक बहुत अच्छा विचार है। –

+0

@event_jr मैं सक्रिय रूप से बनाए रखा जा रहा कुछ के बारे में बिंदु को समझ नहीं पा रहा हूं। मैंने 3 साल पहले उपर्युक्त कोड लिखा था और इसे "बनाए रखने" की आवश्यकता नहीं है, यह एक ही चीज है जो इसे बहुत अच्छी तरह से करना है ... –

+0

यह ऐसा करता है - और अन्य कई चीजें सुनिश्चित करने के लिए कोड स्वचालित रूप से स्वचालित रूप से इंडेंट किया गया है। अधिक सुविधाओं का अर्थ है अन्य मोड के साथ अधिक buts और अधिक संभावित बुरे इंटरैक्शन। इसलिए यह महत्वपूर्ण है कि लेखक सक्रिय रूप से इस पर काम कर रहा है। –

14
  1. अपने क्षेत्र का चयन करें;
  2. टाइप सी-यू इसके बाद आप जिस स्थान पर इंडेंट करना चाहते हैं उसकी संख्या (ऋणात्मक संख्या यदि आप इंडेंटेशन कम करना चाहते हैं);
  3. इस क्षेत्र में इंडेंटेशन लागू करने के लिए सी-एक्स टैब (डिफ़ॉल्ट रूप से indent-rigidly तक) का उपयोग करें।

यह बहुत एस टैब की तुलना में अधिक जटिल है, लेकिन यह IMHO मामले Emacs स्वरूपण में अंतिम उपाय के कुछ प्रकार आपकी समस्या का समाधान नहीं करता है।

संपादित करें: बहुत बेहतर समाधान: Shift a region or line in emacs (स्वीकृत उत्तर)। इंडेंटेशन बदलने के लिए मैं वर्तमान में Emacs में उपयोग कर रहा हूं। चेतावनी: कुछ Emacs Lisp शामिल है।

+0

धन्यवाद। क्या होगा यदि मैं कुछ पंक्तियों के इंडेंटेशन में टैब की संख्या (रिक्त स्थान के बजाय) को बढ़ाने या घटाना चाहता हूं? – Tim

+0

टैब चौड़ाई के साथ सी-यू के बाद मान को गुणा करें। –

+0

@ टिम एक बेहतर तरीका यहां वर्णित है - http://stackoverflow.com/questions/3156450/shift-a-region-or-line-in-emacs (स्वीकृत उत्तर) –

2

यह सरल और अधिक दृष्टि से सहज ज्ञान युक्त हो सकता है: पहले सुनिश्चित करें कि cua-mode सक्षम है (M-x cua-mode इसे टॉगल करता है)। फिर लाइन की शुरुआत पर जाएं और C-return दबाएं। एक लाल आयताकार प्रकट होता है। अब आवश्यकतानुसार आयत को बढ़ाने के लिए अपने कर्सर को नीचे और दाएं स्थानांतरित करें। फिर इसे हटाने के लिए C-d दबाएं। बस।

मैं इस समस्या को अक्सर तब करता हूं जब प्रमुख मोड किसी भी स्वचालित इंडेंटेशन (या जब यह गड़बड़ हो जाता है) को निर्देशित नहीं करता है।

वहाँ एक बहुत अधिक आप, कुआ-मोड के आयतों के साथ क्या कर सकते हैं http://trey-jackson.blogspot.com/2008/10/emacs-tip-26-cua-mode-specifically.html

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