2012-06-21 18 views
19

मान लीजिए आप इन के अंदर जैसे शब्दों के साथ कुछ पाठ है:।Emacs इंटरैक्टिव regex प्रतिस्थापन

"foo" ... "bar" ... "file" ... "emacs" 

और तुम सब करना चाहते हैं "के साथ 'को बदलने के लिए है' मुझे पता है कि यह किया जा सकता है केवल निम्न के लिए पूछ प्रतिस्थापन:

" -> '' 

लेकिन आप सहभागी और regex के साथ यह करने के लिए, और अधिक जटिल मामले के लिए, यह कैसे किया जा सकता है चाहते हैं लगता है

मैं अपने आप को बेहतर समझाने: काश मैं एक हो सकता था आदेश, या उनमें से एक श्रृंखला है, इस तरह से काम करने के लिए:

  • "\\(.*?\\)" की तरह एक regex लिखें और सहभागी परिणामों को देखने के (अर्थात वर्तमान में दृश्यमान मैचों को हाइलाइट किया जाता है जब आप regexp को संपादित करते हैं, और जब आप परिवर्तन करते हैं तो हाइलाइटिंग हमेशा अद्यतन होती है)।
  • एक बार regexp के साथ खुश है, साथ ' '\1' '
  • सहभागितापूर्ण तरीके से एक स्थानापन्न के इस तरह के निर्दिष्ट सभी से मेल खाता है
+0

आपका क्या मतलब है "रिकर्सिव"? –

+0

event_jr: मैंने लुइगी के उत्तर के आधार पर प्रश्न अपडेट किया, और प्रक्रिया में उस हिस्से को दोहराया, क्योंकि यह प्रासंगिक प्रतीत नहीं होता था। – phils

उत्तर

19

अंततः मुझे पता चला !!!!! इन पालन करने के लिए कदम हैं:

  • M-x isearch-forward-regexp

  • सहभागी अपने रेगुलर एक्सप्रेशन से डालें। यदि आप कोई गलती करते हैं तो आप DEL या M-e का उपयोग कर सकते हैं और इसे ठीक करने के लिए अपने रेगेक्स के माध्यम से नेविगेट कर सकते हैं।

  • फिर आपको यह पता चलने के बाद कि आप तुरंत क्या चाहते हैं एम-% और आपके प्रतिस्थापन को प्रतिस्थापित करें और प्रतिस्थापित करना शुरू करें।

तो आप कुल इंटरैक्टिव और वृद्धिशील फैशन में रेगेक्स के साथ खोज और प्रतिस्थापित कर सकते हैं।

+1

अच्छा खोज। मेरी स्थापना 'isearch-forward-regexp' पर' सी-एम-एस 'के लिए बाध्य है। –

+2

'एम-एक्स आइसर्च-वर्णन-बाइंडिंग्स '(या' सी-एस सी-एच सी-एच बी') पढ़ने योग्य है। – phils

7

आदेश query-replace-regexp अपने आवश्यकताओं को पूरा करता है की जगह? Emacs की अधिकांश स्थापनाओं पर यह C-M-% तक बाध्य होगा।

चूंकि यह ओपी की आवश्यकताओं को पूरा नहीं करता है, तो re-builder पर भी देखें। यह फ़ंक्शन Emacs मैन्युअल, या सहायता प्रणाली में प्रलेखित नहीं है, यह केवल Emacs Lisp manual में प्रलेखित है।

+0

क्वेरी-प्रतिस्थापन-regexp यह इंटरैक्टिव नहीं है, या बेहतर वृद्धिशील नहीं है। मैं –

+0

से मेल खाने के लिए एक वृद्धिशील तरीका रखना चाहता हूं, यह मेरे लिए ऐसा नहीं करता है, यह न तो इंटरैक्टिव है और न ही वृद्धिशील है। क्या आपको कोई विचार है क्यों? मैंने apt-get के माध्यम से emacs डाउनलोड किया है। जिस तरह से मैंने समाधान पोस्ट किया है जो मेरे मामले में ठीक काम करता है। –

+0

(क्षमा करें, जब आप अपना उत्तर जोड़ रहे थे तो मैंने अपनी पहली टिप्पणी हटा दी होगी)। मुझे समझ में नहीं आया कि आप रेगेक्सपी * बना रहे थे, जबकि आप वृद्धिशील मैच हाइलाइट करना चाहते थे, यही कारण है कि मैं उलझन में था। मैं समझता हूं कि अब आप क्या कर रहे थे। – phils

7
  • भागो M-x isearch-forward-regexp या C-M-s

  • जैसे ही आप रेगेक्स टाइप करना शुरू करते हैं, पहली घटना तुरंत तुरंत हाइलाइट की जाएगी। कर्सर का उपयोग कर रेगेक्स के माध्यम से वापस जाने का प्रयास खोज को रद्द कर देगा, इसलिए यदि आप कोई गलती करते हैं तो आपको संपादन की अनुमति देने के लिए M-e का उपयोग करना चाहिए, परिवर्तन करें, फिर खोज जारी रखने के लिए एंटर दबाएं।

  • जब आप regex, प्रेस M-% से खुश हैं, एक प्रतिस्थापन स्ट्रिंग टाइप करें (या पहले से इस्तेमाल किया प्रतिस्थापन तार का उपयोग करने के लिए कुंजी का उपयोग करें), तो RET प्रेस इंटरैक्टिव प्रतिस्थापन शुरू करने के लिए।

  • प्रत्येक घटना के लिए, प्रेस y एक बार बदलने के लिए, n को छोड़, ! बाहर निकलने के लिए सभी, RET को बदलने के लिए, या ? आगे विकल्प देखने के लिए।

  • अपनी अंतिम regexp खोज दोहराने के लिए C-M-s दर्ज करें C-s

पूर्ण विवरण manual page में हैं।

+0

मैं वास्तव में बस [लुइगी के उत्तर] (http://stackoverflow.com/a/11137064/201665) में कुछ विवरण जोड़ना चाहता था, लेकिन चूंकि मेरा संपादन अस्वीकार कर दिया गया था, इसलिए मैं इसे एक अलग उत्तर के रूप में पोस्ट कर रहा हूं। –

+0

बल आपके साथ हो सकता है। प्यार से, –

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