emacs

2010-07-01 13 views
10

में किसी क्षेत्र या रेखा को शिफ्ट करें I emacs में दाईं ओर या बाईं ओर n रिक्त स्थान पर स्थानांतरित करने के लिए एक तरीका ढूंढ रहा हूं। इसी तरह की कार्यक्षमता कि यह << या >> में है। इसे किसी क्षेत्र पर काम करना चाहिए या यदि वर्तमान क्षेत्र पर कोई क्षेत्र नहीं चुना गया है और कर्सर को अपने वर्तमान स्थान से नहीं ले जाया गया है।emacs

EmacsWiki से समाधान बहुत अच्छी तरह से M-x indent-rigidly के रूप में काम नहीं करता है, क्योंकि यह कुछ हद तक उपयोग किए गए अंतिम क्षेत्र याद रखता है और बदलाव है कि एक के बजाय। सबसे नज़दीक एक here लगता है लेकिन मैं इसे काम करने में कामयाब नहीं रहा। मैं एक लिस्पी डेवलपर नहीं हूं इसलिए कोड को संशोधित करना मुश्किल है। किसी भी तरह की सहायता का स्वागत है।

धन्यवाद!

उत्तर

6

शायद यह आपके इच्छित तरीके से काम करता है।

 
(defun shift-text (distance) 
    (if (use-region-p) 
     (let ((mark (mark))) 
     (save-excursion 
      (indent-rigidly (region-beginning) 
          (region-end) 
          distance) 
      (push-mark mark t t) 
      (setq deactivate-mark nil))) 
    (indent-rigidly (line-beginning-position) 
        (line-end-position) 
        distance))) 

(defun shift-right (count) 
    (interactive "p") 
    (shift-text count)) 

(defun shift-left (count) 
    (interactive "p") 
    (shift-text (- count))) 
+0

बढ़िया! यह वहीं है जिसे मैं ढूंढ रहा था! बहुत बहुत धन्यवाद। क्या आप इसे EmacsWiki में भी नहीं रखना चाहते हैं? – fikovnik

5

इस लक्ष्य को हासिल करने के लिए मैं आम तौर पर एक चाल कार्य करें:

  • CUA मोड सक्रिय
  • लाइन
  • सी आरईटी, की शुरुआत करने के लिए जाना अब अगर आप कर्सर ले जाने के आप एक आयताकार देखना चाहिए लाल क्षेत्र
  • कर्सर को लाइनों के नीचे ले जाएं और जब तक आप सही स्थानांतरित नहीं कर लेते तब तक स्पेस टाइप करें।

यह कुछ तरीकों से प्रोग्रामेटिक रूप से भी किया जा सकता है (उसी तरह)।

संपादित करें: मैंने अभी भी emacs विकी में आलेख पढ़ा है, यह सीयूए मोड को छोड़कर एक ही समाधान है जो "सामान्य" आयताकार चयन (जब से यह दृश्य है) से असीम रूप से अधिक शक्तिशाली है।

+2

आप सीयूए की उत्कृष्ट आयताकार संपादन सुविधाओं को '(कुआ-चयन-मोड टी)' के साथ अपनी अन्य सुविधाओं से अलग कर सकते हैं। बशर्ते आपके पास 'सी-आरईटी' कुछ और नहीं है, तो आप इसे अपनी init फ़ाइल में डाल सकते हैं और यह किसी भी चीज़ से संघर्ष नहीं करेगा। – phils

+1

स्थानांतरण लाइनों के लिए मूल उपयोग पर त्वरित नोट: आयताकार निर्दिष्ट करने के लिए 'सी-आरईटी' + कर्सर आंदोलन, चक्र कोनों के लिए' आरईटी ', आयताकार से पहले/बाद में आवेषण टाइप करना, बाहर निकलने के लिए' सी-आरईटी '। इस मामूली मोड के बारे में पूरी जानकारी के लिए cua-base.el में "सीयूए आयताकार समर्थन" के तहत नोट्स देखें या http://trey-jackson.blogspot.com/2008/10/emacs-tip-26- cua-mode-special.html – phils

+0

मुझे एक कबुली है। मैं सीयूए मोड का उपयोग करता हूं। –

31

आप क्षेत्र का चयन कर सकता है तो C-u C-x <tab> 4 स्थानों परिवर्तन होगा। आप किसी और को 4 बदलने के लिए सी-यू के बाद एक संख्या टाइप कर सकते हैं।

+0

एक और युक्ति: 'सी-यू' के बाद की संख्या ऋणात्मक हो सकती है, इस मामले में क्षेत्र को दाईं ओर दाईं ओर स्थानांतरित कर दिया जाएगा। –