Emacs का उपयोग पाठ फ़ाइलों को पहले से न खोलने के लिए पुन: प्राप्त करने और बदलने के लिए करें


212

इस प्रश्न के अनुवर्ती के रूप में , यह पता लगाने की कोशिश कर रहा है कि ऐसा कुछ कैसे किया जाए जो आसान होना चाहिए, विशेष रूप से मुझे Emacs का उपयोग करने की अधिक आदत होने से रोकता है और इसके बजाय संपादक को शुरू करने के साथ मैं पहले से परिचित हूं। मैं कई फ़ाइलों के संपादन में अक्सर यहां के उदाहरण का उपयोग करता हूं।

अल्ट्राडिट में मैं ऑल्ट + एस करूँगा, फिर पी विकल्पों के साथ एक संवाद बॉक्स प्रदर्शित करने के लिए: खोजें (जिसमें कई पंक्तियों में नियमित अभिव्यक्ति का उपयोग करना शामिल है), के साथ बदलें, फाइलों / प्रकारों में, निर्देशिका, मैच केस, मैच पूरे शब्द सूची, आदि। परिवर्तित फ़ाइलें और खोजें उप निर्देशिकाएँ। आमतौर पर मैं पहली बार माउस का उपयोग करके उस पाठ का चयन कर सकता हूं, जिसे मैं बदलना चाहता हूं।

किसी भी बाहरी उपयोगिता बुला के बिना, केवल Emacs ही (Windows XP पर) का उपयोग करना, कैसे में बार \ nbaz के साथ सभी foo \ Nbar को बदलने के लिए *.cऔर *.hउसके नीचे कुछ फ़ोल्डर में फ़ाइलें और सभी फ़ोल्डर। हो सकता है कि Emacs ऐसा करने के लिए सबसे अच्छा साधन नहीं है, लेकिन यह एक न्यूनतम कमांड के साथ आसानी से कैसे किया जा सकता है?

जवाबों:


370
  1. M-x find-name-dired: आपको रूट डायरेक्टरी और फ़ाइल नाम पैटर्न के लिए प्रेरित किया जाएगा।
  2. प्रेस tसभी फ़ाइलों के लिए "टॉगल निशान" के लिए मिला।
  3. Q"क्वेरी-रिप्लेसमेंट इन फाइल्स ..." दबाएं : आपको क्वेरी / प्रतिस्थापन regexps के लिए संकेत दिया जाएगा।
  4. इसके साथ आगे बढ़ें query-replace-regexp: SPACEअगले मैच को बदलने और स्थानांतरित करने के लिए, nएक मैच को छोड़ने के लिए, आदि।
  5. C-x sबफ़र्स को बचाने के लिए दबाएँ । (आप एक बार में सभी को दबा सकते हैं y, nया !सहेज सकते हैं)

10
नहीं, यह पुनरावर्ती है। गैर-पुनरावर्ती संस्करण dired- मोड में% m होगा।
क्रिस कॉनवे

5
शायद इसलिए कि आप C: \ WINDOWS \ system32 \ find.exe को कॉल कर रहे हैं, GNU को नहीं।
जैज

6
Steen, Chris: संभवतः वह नहीं जो आप चाहते हैं, लेकिन आप 'Cx s' (save-some-buffers) का उपयोग कर सकते हैं, यह आपको प्रत्येक संशोधित फ़ाइल के लिए संकेत देगा, इसलिए आपको कई बार 'y' को हिट करना होगा।
danielpoe

48
C-x s !एक बार में सभी फ़ाइलों को बचाने के लिए।
cYrus

10
M-,खोज जारी रखने और बदलने के लिए (उदाहरण के लिए "रिवर्ट फ़ाइल के बाद" प्रॉम्प्ट यदि डिस्क पर फ़ाइल बदल गई है)।
tfischbach

37
  • M-x find-name-dired RET
    • सभी फ़ाइलों को सूची में प्रदर्शित होने में कुछ समय लग सकता है, नीचे स्क्रॉल करें ( M->) तक " find finished" यह सुनिश्चित करने के लिए प्रकट होता है कि वे सभी लोड किए गए हैं
  • प्रेस tसभी फ़ाइलों के लिए "टॉगल निशान" के लिए मिला
  • Q"क्वेरी-रिप्लेसमेंट इन फाइल्स ..." दबाएं : आपको क्वेरी / प्रतिस्थापन regexps के लिए संकेत दिया जाएगा।
  • क्वेरी-रीप्ले-रीजैक्सप के साथ आगे बढ़ें: स्पेस या yबदलने और अगले मैच में जाने के लिए, एक मैच को छोड़ने के लिए एन आदि।
    • प्रकार ! बिना पूछे वर्तमान फ़ाइल में सभी घटनाओं को बदलने के लिए,N बदलने के लिए, वर्तमान फ़ाइल के बाकी के लिए सभी संभव प्रतिस्थापन को छोड़ने के लिए कहें। ( Nकेवल 23+ emacs है)
    • आगे पूछे बिना सभी फ़ाइलों पर प्रतिस्थापन करने के लिए, टाइप करें Y
  • "आइबफ़र" को कॉल करें ( C-x C-bयदि आईबफ़र के लिए बाध्य है, याM-x ibuffer RETसभी खोली गई फ़ाइलों को सूचीबद्ध करने के लिए ) को करें।
  • टाइप * uसहेजे न गए फ़ाइलों को चिह्नित करने, टाइप Sसभी चिह्नित फ़ाइलों को बचाने के लिए
  • * * RETसभी चिह्नों Dको चिह्नित करने के लिए , या सभी चिह्नित फ़ाइलों को बंद करने के लिए टाइप करें

यह उत्तर इस उत्तर से , इस साइट से , और मेरे अपने नोट्स से संयुक्त है । Emacs 23+ का उपयोग करना।


3
ibufferC-x C-bडिफ़ॉल्ट रूप से बाध्य नहीं है ।
फिल्स

2
खैर व्यक्तिगत रूप से मेरा सुझाव है कि लोगों को है बाध्य C-x C-bकरने के लिए ibuffer, यह और भी बेहतर डिफ़ॉल्ट बंधन से है, क्योंकि। बस (global-set-key (kbd "C-x C-b") 'ibuffer)अपने .emacs फ़ाइल में जोड़ें । ऐसा करने M-x ibuffer RETमें, उपरोक्त निर्देशों का उपयोग करें।
फिल्स

ठीक है। मुझे लगता है कि मेरे पास emacs स्टार्टअप किट है, यही वजह है कि मेरा बाउंड है
फ्रैंक हेनार्ड

1
फ़ाइल bla-bla-blaको केवल पढ़ने के लिए विज़िट किया जाता है और यह खोजना बंद कर देता है। कैसे बचें / अनदेखा करें और प्रतिस्थापित करते रहें? धन्यवाद।
फेलिप

3
क्यों ibufferजब आप कर सकते हैं C-x s( save-some-buffers) और प्रकार !? मैं शेख़ी नहीं बनना चाहता, बस जिज्ञासु हूं। पीएस प्लस वर्णन करने के लिए !, Nऔर Y
d12frosted

17

प्रदान किए गए उत्तर बहुत अच्छे हैं, हालांकि मैंने सोचा कि मैं थोड़ा अलग दृष्टिकोण जोड़ूंगा।

यह एक अधिक संवादात्मक विधि है, और इसके लिए आवश्यकता है wgrep, rgrepऔर iedit। दोनों ieditऔर wgrepMelpa या जैम (का उपयोग कर के माध्यम से स्थापित किया जाना चाहिए M-x package-list-packages)

पहले M-x rgrepउस स्ट्रिंग को खोजने के लिए दौड़ें जिसे आप खोज रहे हैं।

आप फ़ाइल प्रकार / पैटर्न और फ़ोल्डर को फिर से दर्ज करने में सक्षम होंगे।

इसके बाद आपको इसे wgrepशुरू करने की आवश्यकता होगी C-s C-p

Wgrep आपको rgrepपरिणाम संपादित करने देगा , इसलिए मिलान करने और शुरू करने के लिए स्ट्रिंग पर एक क्षेत्र सेट iedit-modeकरें C-;(आपके टर्मिनल के आधार पर आपको इसे फिर से बाँधने की आवश्यकता हो सकती है)

सभी घटनाएँ एक साथ संपादन योग्य होंगी। C-x C-sकरने के लिए wgrep। फिर C-x s !बदली हुई फाइलों को सहेजना है।

इस पद्धति का मुख्य लाभ यह है कि आप iedit-modeकुछ मैचों को टॉगल करने के लिए उपयोग कर सकते हैं M-;। आप rgrepफ़ाइलों में कूदने के लिए परिणामों का उपयोग भी कर सकते हैं , उदाहरण के लिए यदि आपके पास एक अप्रत्याशित मैच है।

मुझे एक प्रोजेक्ट में स्रोत संपादन और नाम बदलने के प्रतीक (चर, फ़ंक्शन नाम आदि) के लिए यह बहुत उपयोगी लगता है।

यदि आप पहले से ही पता नहीं है / iedit मोड का उपयोग करते हैं तो यह एक बहुत ही उपयोगी उपकरण है, मैं दृढ़ता से आपको इसे देखने की सलाह देता हूं।


यह तकनीक iedit का उपयोग किए बिना भी बहुत शक्तिशाली है। यह पता चलता है कि कैसे grep (lgrep / rgrep के साथ आसान) यह जानने के लिए कि थोक खोज-प्रतिस्थापन कैसे करें!
नीलेंमरिस

Rgrep / wgrep / macros का संयोजन कमाल का है।
ओसोडो

2
शुरू अछि wgrepहै C-c C-pbtw।
तकनीकी जियो

15

प्रोजेक्टाइल वास्तव में अच्छा है: Cc pr कमांड प्रॉजेक्टाइल-रिप्लेस चलाता है


13

मैं आम तौर पर इस कार्य को करने के लिए अन्य उपकरणों का उपयोग करता हूं, और ऐसा लगता है कि EmacsWiki के फाइंड एंड रिप्लेस एक्रॉस फाइल्स एंट्री शेल में उल्लिखित कई दृष्टिकोण हैं, लेकिन फाइंड पैकेज बहुत आशाजनक लगता है।

स्रोत फ़ाइल का भाग चोरी :

(defun findr-query-replace (from to name dir)
  "Do `query-replace-regexp' of FROM with TO, on each file found by findr.

मैं एक्सटेंशन java और hxx के साथ findr.el का उपयोग करके सभी फ़ाइल में स्ट्रिंग "संग्रहणीय" पाया करने की कोशिश कैसे करूं?
स्वदेश

@swdev: Mx findr-query-RET संग्रहणीय RET <प्रतिस्थापन> RET। * की जगह लें। जावा RET <निर्देशिका> RET
ShreevatsaR

मुझे यह दृष्टिकोण पसंद है (यह प्रत्यक्ष दृष्टिकोण में शामिल सभी टॉगल से बचा जाता है)। मैं इसे प्रोजेक्टाइल (प्रोजेक्ट-रूट-डिस्कवर) के साथ संयोजित करने के लिए कुछ सुविधा कार्यों का उपयोग करता हूं, और बिंदु पर चीज को प्रतिस्थापित करता हूं
Att Righ

6

जानकारी का स्रोत:

Emacs समर्थक उपयोगकर्ताओं के लिए:

  1. यदि आप सभी उपनिर्देशिकाओं की आवश्यकता है, तो dir में फ़ाइलों को सूचीबद्ध करने के लिए dired कॉल करें, या find-dired कॉल करें।
  2. अपनी इच्छित फ़ाइलों को चिह्नित करें। आप can% m by लिखकर regex द्वारा चिह्नित कर सकते हैं।
  3. Dired-do-query-प्रतिस्थापित-regexp कॉल करने के लिए Q टाइप करें।
  4. अपना खोज रेगेक्स टाइप करें और स्ट्रिंग बदलें। 〔El आम एलीज रेगेक्स पैटर्न el
  5. प्रत्येक घटना के लिए, y y को टाइप करें, n को स्किप करने के लिए। पूरे ऑपरेशन को निरस्त करने के लिए g Ctrl + g g टाइप करें।
  6. प्रकार ! वर्तमान फ़ाइल में सभी घटनाओं को बदलने के लिए, एन वर्तमान फ़ाइल के बाकी के लिए सभी संभव प्रतिस्थापन को छोड़ दें। (एन केवल 23 emacs है)
  7. आगे पूछे बिना सभी फाइलों पर प्रतिस्थापन करने के लिए, Y टाइप करें (केवल 23 Emacs)
  8. सभी खोली गई फ़ाइलों को सूचीबद्ध करने के लिए ibuffer को कॉल करें। सभी सहेजे गए फ़ाइलों को चिह्नित करने के लिए Type * u】 टाइप करें, सभी चिह्नित फ़ाइलों को बचाने के लिए S टाइप करें, उन सभी को बंद करने के लिए D टाइप करें।

Emacs शुरुआती के लिए चरण-दर-चरण गाइड

लक्ष्य फ़ाइलों का चयन करें

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

एक निर्देशिका में फ़ाइलों का चयन

पहले आपको उन फ़ाइलों का चयन करना होगा जिन्हें आप प्रतिस्थापित करना चाहते हैं। चित्रमय मेनू का उपयोग करें ▸ फ़ाइल graph ओपन डायरेक्टरी 〖। Emacs आपसे निर्देशिका पथ के लिए पूछेगा। निर्देशिका पथ टाइप करें, फिर Enter दबाएँ।

अब, आपको फ़ाइलों की सूची दिखाई जाएगी, और अब आपको उन फ़ाइलों को चिह्नित करने की आवश्यकता है जिन्हें आप चाहते हैं कि regex ढूंढें / कार्य करने के लिए प्रतिस्थापित करें। आप कर्सर को अपनी इच्छित फ़ाइल पर ले जाकर एक फ़ाइल चिह्नित करते हैं, फिर m दबाते हैं। यू दबाकर इसे अनमार्क कर दें। (उप-सूचियों को सूचीबद्ध करने के लिए, अपने कर्सर को निर्देशिका में ले जाएं और i दबाएं। उप-निर्देशिका की सामग्री को नीचे सूचीबद्ध किया जाएगा।) सभी फ़ाइलों को एक regex द्वारा चिह्नित करने के लिए, 【% m type टाइप करें, फिर अपना regex पैटर्न लिखें। उदाहरण के लिए, यदि आप सभी HTML फ़ाइलों को चिह्नित करना चाहते हैं, तो m% m html तब .html $ टाइप करें। (आप चित्रमय मेनू "मार्क" में मार्क कमांड्स की एक सूची पा सकते हैं (यह मेनू तब दिखाई देता है जब आप बिंदीदार तार में होते हैं)।)

एक निर्देशिका और उसके सभी उप-निर्देशिकाओं में फ़ाइलों का चयन करना

यदि आप सैकड़ों उपनिर्देशिकाओं सहित, एक निर्देशिका के अंदर फ़ाइलों को खोजना / बदलना चाहते हैं, तो इन सभी फ़ाइलों का चयन करने का एक तरीका यहाँ है।

कॉल डेड-डेयर। (आप + Alt + x 【दबाकर एक कमांड को कॉल करते हैं) फिर, एक डायरेक्टरी नाम टाइप करें, ⁖ / Users / mary / myiles

नोट: यदि आप एक यूनिक्स गैर-ग्राफिकल पाठ टर्मिनल पर emacs का उपयोग कर रहे हैं, और यदि + Alt + x using काम नहीं करता है, तो समतुल्य कुंजी स्ट्रोक x Esc x using है।

Emacs आपको शीघ्रता से "रन फाइंड (आर्ग्स के साथ):" पूछेगा। यदि आपको सभी HTML फ़ाइलों पर प्रतिस्थापन करने की आवश्यकता है, तो "html" टाइप करें। अगर आपको इस बात की परवाह नहीं है कि किस तरह की फ़ाइल है, लेकिन उस dir के तहत बस सभी फाइलें हैं, तो “-type f” दें।

अब, ऊपर वर्णित के रूप में फ़ाइलों को चिह्नित करें।

इंटरएक्टिव खोजें / बदलें

अब, आप अंतःक्रियात्मक खोज को प्रतिस्थापित करने के लिए तैयार हैं। सरलता के लिए, मान लें कि आप "सुपर" शब्द को "सुपर" से बदलना चाहते हैं। अब, dired-do-query-replace-regexp पर कॉल करें। यह आपको regex स्ट्रिंग और प्रतिस्थापन स्ट्रिंग के लिए संकेत देगा। "त्वरित" टाइप करें, दर्ज करें, फिर "सुपर"।

अब, एमएसीएस आपके पैटर्न का उपयोग करेगा और फाइलों की जांच करेगा, और जब भी कोई मैच होगा, तब आपको रोक और दिखाएगा। जब ऐसा होता है, तो emacs आपको संकेत देगा, और आपके पास परिवर्तन करने या परिवर्तन को छोड़ने का विकल्प होगा। परिवर्तन करने के लिए, y टाइप करें। स्किप करने के लिए, n टाइप करें। यदि आप चाहते हैं कि emacs आगे बढ़ें और वर्तमान फ़ाइल में ऐसे सभी परिवर्तन करें, तो टाइप करें!

यदि आप अपने द्वारा किए गए परिवर्तनों को सहेजे बिना पूरे ऑपरेशन को रद्द करना चाहते हैं, तो】 Ctrl + g the टाइप करें, फिर मेनू the फ़ाइल it बाहर निकलें Emacs 〖का उपयोग करके emacs से बाहर निकलें।

बदली हुई फाइलों को सहेजना

अब, जब आप उपरोक्त प्रक्रिया से गुजरे, तो आपको एक और कदम उठाने की आवश्यकता है, और वह है परिवर्तित फ़ाइलों को सहेजना।

यदि आप 22 या उसके बाद के emacs संस्करण का उपयोग कर रहे हैं, तो बफर सूची मोड में जाने के लिए ibuffer को कॉल करें, फिर सभी सहेजे गए फ़ाइलों को चिह्नित करने के लिए mark * u u टाइप करें, फिर उन सभी को बचाने के लिए S टाइप करें। (यह शिफ्ट-एस है)

यदि आप एक इमैक संस्करण 21 का उपयोग कर रहे हैं, तो आप यह कर सकते हैं: सूची-बफ़र्स को कॉल करें, फिर कर्सर को उस फ़ाइल पर ले जाएँ जिसे आप सहेजना चाहते हैं और टाइप करें। यह बाद में कार्रवाई को बचाने के लिए फ़ाइल को चिह्नित करेगा। यू को अनमार्क करना टाइप करें। एक बार जब आप कर लेते हैं, तो टाइप करें x सभी फाइलों को सहेजने के लिए निष्पादित करने के लिए। (emacs में, खोली गई फ़ाइल को "बफर" कहा जाता है। वहां अन्य चीजों की उपेक्षा करें।)

उपरोक्त विकल्पों के लिए, आप सेव-कुछ-बफर-Ctrl + xs】 भी कह सकते हैं। फिर इमेक प्रत्येक सहेजे गए फ़ाइल को प्रदर्शित करेगा और पूछेगा कि क्या आप इसे सहेजना चाहते हैं।

नोट: emacs का रेग्क्स पर्ल या पायथन के समान नहीं है, लेकिन समान है। एक सारांश और सामान्य पैटर्न के लिए, देखें: Emacs Regex।


2
यह उत्तर मुझे उम्मीद है कि सबसे अधिक मतदान के जवाब से अधिक नौसिखिए के अनुकूल बनाना चाहिए। लिंक के बजाय पूरी बात डालने के लिए मुझे प्रेरित करने के लिए धन्यवाद।
प्रशांत शर्मा

उत्तर स्रोत से शुरू होता है: पहली पंक्ति के रूप में। कॉपी पेस्ट करने का औचित्य है: कभी-कभी ब्लॉगों के लिए बाहरी लिंक पुराना हो जाता है और फिर उत्तर बेकार हो जाएगा। और इस प्रकार विकी मेटा द्वारा सुझाव दिया गया है। मैंने पूरी बात कॉपी करने का फैसला किया।
प्रशांत शर्मा

5

एक गहरी निर्देशिका वृक्ष को नीचे गिराने के लिए तारांकित का उपयोग करना इस कार्य के लिए थोड़ा धीमा होने वाला है। आप टैग-क्वेरी-प्रतिस्थापन का उपयोग करने पर विचार कर सकते हैं । इसका मतलब है कि टैग तालिका बनाने के लिए गोलाबारी करना, लेकिन यह वैसे भी उपयोगी है, और यह जल्दी है।


बस 14,000 से अधिक फ़ाइलों के साथ एक निर्देशिका पर कोशिश की। Emacs में पॉपअप करने के लिए कुछ सेकंड का समय लिया। तो निश्चित रूप से धीमा (अब) नहीं।
बेरेंड डी बोअर

3

खुले बफ़र्स के लिए, मैं यही करता हूँ:

(defun px-query-replace-in-open-buffers (arg1 arg2)
  "query-replace in all open files"
  (interactive "sRegexp:\nsReplace with:")
  (mapcar
   (lambda (x)
     (find-file x)
     (save-excursion
       (goto-char (point-min))
       (query-replace-regexp arg1 arg2)))
   (delq
    nil
    (mapcar
     (lambda (x)
       (buffer-file-name x))
     (buffer-list)))))

3

M-X Dired, और सभी फ़ाइलों को चिह्नित करने के लिए, और Qउन सभी में पाठ को बदलने के लिए क्वेरी करें। आप iक्वेरी-प्रतिस्थापित करने से पहले कमांड का उपयोग करके एक उप निर्देशिका का विस्तार कर सकते हैं । वे महत्वपूर्ण जानकारी जो मैं जोड़ रहा हूं वह यह है कि यदि आप i कमांड को एक उपसर्ग (नियंत्रण-यू) देते हैं, तो यह आपको arg के लिए संकेत देगा, और -R तर्क पुन: बफर subdirs में सभी का विस्तार करेगा dired। तो अब आप हर फाइल को पूरी डायरेक्टरी में क्वेरी-सर्च कर सकते हैं।


2

एक अन्य विकल्प है आइकल्स खोज का उपयोग करना । यह एक अलग प्रकार की वृद्धिशील खोज है जो खोज हिट के विरुद्ध आपके मिनीबफ़र इनपुट के पूरा होने का उपयोग करती है। जैसा कि आप अपने वर्तमान इनपुट को संशोधित करते हैं मिलान के सेट को बफर में अपडेट किया जाता है *Completions*

आप किसी भी संख्या में फ़ाइलें, बफ़र या बुकमार्क किए गए स्थान खोज सकते हैं, जिन्हें आप मिनीबफ़र पैटर्न (जैसे रेगेक्सप) मिलान का उपयोग करके चुन सकते हैं।

जब आप का दौरा एक खोज मारा आप कर सकते हैं की जगह या तो पूरा हिट या कि अपने वर्तमान minibuffer इनपुट से मेल खाता है इसके बारे में सिर्फ हिस्सा मांग पर। मांग पर प्रतिस्थापन का मतलब है कि आप बदले में प्रत्येक खोज हिट के बारे में चिंतित नहीं हैं; आप किसी भी क्रम में सीधे अपने इच्छित हिट्स तक पहुँच सकते हैं। यदि आपके पास सीमित संख्या में प्रतिस्थापन करने के लिए है: तो यह तरीका अधिक प्रभावी हो सकता है y/n

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

आप आसान पहुंच / नेविगेशन के लिए विभिन्न प्रकार के ऑर्डर में खोज हिट को भी सॉर्ट कर सकते हैं ।


2

find-name-dired ठीक है, लेकिन:

  • आपको मिलने वाली सभी फाइलें एक ही, सिंगल रेग्जैप से मेल खाती हैं।
  • find-diredउस संबंध में अधिक लचीला है, लेकिन यह भी सामान्य नियमों का उपयोग करने के लिए बनाया गया है (भले ही वे मनमाने ढंग से जटिल हो सकते हैं)। और निश्चित रूप findसे इसकी अपनी, जटिल भाषा है।
  • यदि आप तब केवल कुछ फ़ाइलों पर कार्रवाई करना चाहते हैं, जिनके नाम find(-name)-diredबफर में एकत्र किए गए थे , तो आपको उन पर निशान लगाने या हटाने / हटाने की आवश्यकता है, जिन पर आप कार्य नहीं करना चाहते हैं।

एक विकल्प यह है कि चिह्नित उपनिर्देशिकाओं में Dired + कमांड्स का उपयोग किया जाता है जो (a) चिह्नित फाइलों और (b) सभी चिह्नित फाइलों (या सभी फाइलें, यदि कोई भी चिह्नित नहीं हैं) का उपयोग करता है ... पुनरावर्ती पाया गया । यह आपको फ़ाइल पसंद पर सामान्यता और आसान नियंत्रण दोनों प्रदान करता है। ये "यहाँ और नीचे" कमांड सभी उपसर्ग कुंजी पर Dired मोड में हैं।M-+

उदाहरण के लिए, M-+ Qएक ही है Q--- क्वेरी-रिप्लेस, लेकिन टार्गेट फाइल्स उन सभी में हैं जो वर्तमान डायर में और किसी भी चिह्नित सबडिर में, नीचे, नीचे, नीचे ...

हां, इस तरह के यहां और नीचे के आदेशों का उपयोग करने का एक विकल्प सभी उपखंडों और उनके उप-विभाजकों को पुनरावर्ती रूप से सम्मिलित करना है , और फिर शीर्ष-स्तरीय कमांड का उपयोग करें जैसे कि Q। लेकिन यह अक्सर डाला उपखंड के साथ परेशान नहीं करने के लिए सुविधाजनक हो सकता है।

और ऐसा करने के लिए आपको वैसे भी ऐसे सभी उपखंडों को पुन: सम्मिलित करने के लिए एक त्वरित तरीके की आवश्यकता है । यहां भी, Dired + मदद कर सकता है। M-+ M-iसभी चिह्नित उपखंडों और अपने स्वयं के चिह्नित उपखंडों को पुनरावर्ती रूप से सम्मिलित करता है। यही है, यह ऐसा है M-i(जो Dired + में चिह्नित उप-विभाजनों को सम्मिलित करता है ), लेकिन यह उप-विभाजनों पर पुनरावर्ती कार्य करता है।

(ऐसे सभी "यहाँ-और-नीचे" Dired + कमांड मेनू में हैं > मल्टीपल > यहाँ और नीचे चिह्नित ।)

आप एक Emacs फ़ाइलसेट पर Dired ऑपरेशंस भी कर सकते हैं , जो कि कहीं भी स्थित फ़ाइलों के नामों का सहेजा गया सेट है। और यदि आप आइकल्स का उपयोग करते हैं तो आप किसी फ़ाइलसेट या अन्य प्रकार की सहेजे गए फ़ाइल सूचियों में केवल फ़ाइलों के लिए Dired बफर खोल सकते हैं।

आप किसी भी Dired बफर को बुकमार्क कर सकते हैं , जिसमें से एक जिसे आप उपयोग कर बनाते हैं find(-name)-dired। यह आपको बाद में इस तरह के सेट (जैसे एक प्रोजेक्ट सेट) पर लौटने का एक त्वरित तरीका देता है। और यदि आप बुकमार्क + का उपयोग करते हैं तो एक डेयरेड बफर रिकॉर्ड (ए) इसके lsस्विच, (बी) को चिह्नित करते हैं, जो फाइलें चिह्नित की जाती हैं, (सी) जो उपनिर्देशिकाएं सम्मिलित हैं, और (डी) जो (उप) निर्देशिका छिपी हैं। जब आप बुकमार्क पर "जंप" करते हैं, तो यह सब बहाल हो जाता है। बुकमार्क + आपको सूखे बफ़र्स के पूरे पेड़ को बुकमार्क करने देता है --- बुकमार्क करने के लिए कूदते हुए पेड़ में सभी बफ़र्स को पुनर्स्थापित करता है।


जो कोई भी: यह समझाने की परवाह करें कि आपने इस उत्तर को क्यों अस्वीकार किया है?
आकर्षित किया

1

मैं एक और महान उपकरण का सुझाव देना चाहूंगा जिसका उल्लेख अभी तक नहीं किया गया है, जिसका नाम है हेलम

यह कई मानक Emacs संचालन के लिए एक महान प्रतिस्थापन है जिसमें पूर्णता, खोज आदि शामिल हैं। विशेष रूप से, helm-find-filesकई चयनित फ़ाइलों के भीतर क्वेरी रिप्लेसमेंट (regexp सहित) करने की अनुमति देता है।

बस खुला helm-find-files, साथ संबंधित फाइलों को चिह्नित M-SPCऔर उसके बाद का उपयोग F6या F7की जगह क्वेरी चलाने के लिए या चयनित फ़ाइलों में regexp की जगह क्वेरी।


के helm-find-filesबजाय regexp द्वारा चिह्नित कर सकते हैं M-SPC?
नॉर्डलॉव

-2

यह Emacs नहीं है, लेकिन xxdiff xx-rename नामक एक टूल के साथ आता है, जो कि एक समय में कई स्ट्रिंग्स के लिए करेगा (उदाहरण के लिए से FROM TO), इंटरेक्टिव प्रॉम्प्टिंग के साथ, सभी संशोधित फ़ाइलों के बैकअप को सहेजें, और एक छोटा उत्पादन करें। संदर्भ के साथ किए गए परिवर्तनों का लॉग। यही कारण है कि जब मैं बड़े / वैश्विक नामकरण करता हूं तो मैं इसका उपयोग करता हूं।

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