चिह्नित निर्देशिकाओं में regexp मिलान करने वाली फ़ाइलों को पुन: खोलें


9

आम तौर पर, मैं निर्देशिकाओं (और उनकी उपनिर्देशिकाओं) के एक सेट के भीतर सभी फ़ाइलों को खोलने में सक्षम होना चाहूंगा जहां फ़ाइलनाम किसी दिए गए rexxp से मेल खाता है।

उदाहरण के लिए

  /home/nispio/project:
  total used in directory 1612 available 1000000000
  drwxrwxr-x 13 nispio group    4096 Sep 19 14:06 .
  drwxrwxr-x  7 nispio group    4096 Sep 22 16:41 ..
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 cfg
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 hlp
* drwxrwxr-x  2 nispio group    4096 Sep 23 16:52 hst
* drwxrwxr-x  2 nispio group    4096 Sep 29 14:52 inc
* drwxrwxr-x  2 nispio group    4096 Oct  1 12:53 lib
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 mcr
  drwxrwxr-x  2 nispio group    4096 Sep 24 10:50 pyl
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 snr
  drwxrwxr-x  2 nispio group    4096 Sep 19 12:46 unix

मैं निर्देशिका में चिह्नित किया है hst, incऔर lib, और अब मैं एक्सटेंशन के साथ सभी फ़ाइलों की यात्रा करना चाहते .c, .ccऔर .hउन तीन निर्देशिका और उनके उप निर्देशिकाओं के भीतर।

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

मैं का उपयोग कर इस एक ही बात करने के लिए सुझाव के लिए खुले हूं helmया dired+या किसी अन्य एक्सटेंशन है कि मुझे करने देगा और अधिक आसानी से मेरी फाइल सिस्टम से नेविगेट।


क्या माथियास या ड्रू ने आपके जवाब का जवाब दिया है? या आप कुछ अलग की तलाश में थे?
मालाबार

जवाबों:


14

इसे इस्तेमाल करे:

C-u C-x d

आइए, आप इस बात के लिए तर्क दर्ज करते हैं कि किस तरह से फ़ाइलों को सूचीबद्ध करना चाहिए। डिफ़ॉल्ट रूप से यह -alप्रॉम्प्ट पर कहता है । Rउस के साथ जोड़ें , साथ समाप्त -alR। टाइप करें RET

एक निर्देशिका का चयन करें / टाइप करें और फिर दबाएँ RET

यह आपके द्वारा चुने गए और नीचे से सभी निर्देशिकाओं को पुन: खोल देगा।

यहां से, % mएक निश्चित फ़ाइल नाम पैटर्न से मेल खाते सभी फ़ाइलों को चिह्नित करने के लिए टाइप करें। मैं भी अक्सर टाइप करता हूँ tऔर फिर kमारने के लिए (छुपाने के लिए) उन सभी फाइलों को देखता हूँ जिनमें मुझे कोई दिलचस्पी नहीं है। tसभी फ़ाइलों को चिह्नित करने के लिए फिर से टाइप करें।

जहाँ तक वास्तव में फाइलें खोलने के बाद, मुझे नहीं लगता कि ऐसा करने का कोई मानक तरीका है, लेकिन आप इसे करने के लिए एक नई कमांड को आसानी से परिभाषित कर सकते हैं (इसे अपनी .emacsफ़ाइल में रखें):

(defun dired-find-marked-files ()
 (interactive)
 (dolist (f (dired-get-marked-files)) 
  (find-file f)))

सबसे शायद किसी ने पहले से ही कुछ अच्छे डेयरिंग एन्हांसमेंट पैकेज में इसे शामिल किया है, लेकिन यह खुद भी करने में मज़ा है;)

का आनंद लें!


7

इसे आप हेल्म-प्रोजेक्टाइल-फाइंड-फाइल के साथ आसानी से कर सकते हैं । चूंकि प्रक्षेप्य अपने सापेक्ष पथ के साथ हर फाइलों पर नज़र रखता है, आप आसानी से किसी भी चीज़ को कम कर सकते हैं। अपने उदाहरण का उपयोग करते हैं। आपके मामले में, आप में खुली फ़ाइलों करना चाहते हैं hst, incऔर lib। आप इस निर्देशिका से संबंधित सभी फ़ाइलों को दो तरीकों से प्राप्त कर सकते हैं:

  • हेलम प्रॉम्प्ट में helm-projectile-find-file, प्रत्येक डायरेक्टरी दर्ज करें और उस डायरेक्टरी में संकरी फाइलों को चिह्नित करें। उदाहरण के लिए, पहले मैं दर्ज करता हूं ^hst/(जो उन सभी फाइलों को बताता है जिसमें hst/प्रत्येक उम्मीदवार की शुरुआत में शामिल है)। सभी फ़ाइलों को चिह्नित करेंM-a , अन्य दो निर्देशिकाओं में फ़ाइलों के लिए कुछ समान करें।

  • या, आप कर सकते हैं इस पद्धति का उपयोग करके सभी निर्देशिका में फ़ाइलों को पुनः प्राप्त : ^hst/\|^inc\|^lib। हेल्म सभी के बाद रेगेक्स को स्वीकार करता है। रेगेक्स का \|अर्थ है or। यदि आप एक बार में सब कुछ का चयन करना चाहते हैं तो ऐसा करें।

इन दोनों में से, आपने उन सभी फाइलों को चिह्नित किया होगा जिन्हें आप खोलना चाहते हैं। फिर बस RETउन सभी को खोलने के लिए दबाएं ।

कृपया ध्यान दें कि यदि आपके पास उन निर्देशिकाओं में बहुत सारी फाइलें हैं, तो आपको बढ़ाने की आवश्यकता है helm-candidate-number-limit। अन्यथा एक बार जब उम्मीदवारों की संख्या सीमा समाप्त हो जाती है, तो कोई भी अधिक उम्मीदवार प्रदर्शित नहीं होते हैं और आप अदृश्य उम्मीदवारों का चयन नहीं कर सकते हैं। nilयदि आप यह सीमा नहीं चाहते हैं तो इसे उच्च संख्या पर सेट करें या सेट करें ।

हेल्म के साथ अच्छी बात यह है कि आप इंटरेक्टिव रूप से फ़ाइलों का चयन कर सकते हैं।


मुझे लगता है कि वह उन सभी को एक साथ खोलना चाहता है, उनमें से किसी एक का चयन नहीं करना चाहता।
मालाबार

1
@Malabarba आप उन सभी फाइलों को चुन सकते हैं, जो RET M-aका उपयोग करती हैं helm-projectile-find-fileऔर एक बार उन सभी को खोलने के लिए दबाएं जिन्हें मैंने सूचीबद्ध किया है।
Tu Do

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

@ मलबारबा धन्यवाद। यह अब और स्पष्ट है।
Tu Do

4

यहां दो संभावनाएं (विकल्प) हैं:

  1. Dired में आप उन सभी उप-विभाजकों को शामिल कर सकते हैं जिनमें आप जिन फ़ाइलों पर कार्य करना चाहते हैं, वे या तो lsस्विच का उपयोग करके -Rया iविशिष्ट उप- विभाजकों को शामिल करने के लिए उपयोग कर सकते हैं। यदि आप लाइब्रेरी Dired + का उपयोग करते हैं, तो आप उन सभी सूचीबद्ध फ़ाइलों को चिह्नित * .करने के लिए (बाउंड टू diredp-mark/unmark-extension, का .hउपयोग कर सकते हैं), जिनमें दिए गए एक्सटेंशन (जैसे ) हैं। फिर आप सभी चिह्नित फ़ाइलों को खोलने के Fलिए (बाउंड dired-do-find-marked-files) का उपयोग कर सकते हैं ।

  2. पुस्तकालय के साथ + आप सभी चिह्नित फाइलों पर और चिह्नित उपनिर्देशिकाओं में सभी चिह्नित फाइलों पर कार्य कर सकते हैं, पुनरावर्ती रूप से परिभाषित, IOW, उप-वर्गों के उप-प्रबंधक, उनके उप-प्रबंधक आदि।

    किसी भी चिह्नित निर्देशिका के लिए, यदि कोई फ़ाइल उस निर्देशिका में चिह्नित नहीं है (यानी, उस उप-सूची के लिए एक Dired सूची में चिह्नित) तो कार्रवाई उसकी सभी फ़ाइलों पर होती है।

    इस तरह की फाइलों पर अलग-अलग तरीके से काम करने (खोलने, खोजने आदि) के लिए उचित संख्या में कमांड हैं। लेकिन उन पर कार्रवाई करने के लिए फाइलें केवल उसी तरह से निर्धारित की जाती हैं; सेट को फ़िल्टर करने के लिए एक ग्लोब पैटर्न या एक रेक्सएक्सपी दर्ज करने की संभावना भी नहीं है।

    हालाँकि, यदि आप लाइब्रेरी आइकल्स को Dired + के साथ उपयोग करते हैं M-+ C-F, तो आप M-+ C-S-f( यानी, जो कि बाध्य है icicle-visit-marked-file-of-content-recursive) का उपयोग कर सकते हैं , बस वर्णित वर्णित किसी भी या सभी फाइलों को खोलने के लिए (यानी, उन चिह्नित या चिह्नित उप-विभाजनों में, पुनरावर्ती रूप से परिभाषित)।

    आप फ़ाइल नामों (और / या फ़ाइल सामग्री) को फ़िल्टर करने के लिए, मक्खी पर रेगेक्स का उपयोग कर सकते हैं। उदाहरण के लिए, आप, आप अनुरोध के रूप में, है कि एक्सटेंशन फ़ाइलों के सभी खोल सकते हैं .c, .ccऔर .hचिह्नित उपनिर्देशिका में (चिह्नित उपनिर्देशिका के साथ एक ही तरीके से हैंडल किया जा रहा है, रिकर्सिवली)।


3

eshell zsh-स्टाइल **/*ग्लोब विस्तार को हैंडल करता है , इसलिए एक दृष्टिकोण है कि eshell को सही डायरेक्टरी में चलाना और चलानाfor f in **/*cc **/*h { find-file $f}

वैकल्पिक रूप से, फंक्शन find-fileवाइल्डकार्ड्स का समर्थन करता है , जब उन्हें क्विक से बुलाया जाता है। यहाँ उस के लिए प्रलेखन से एक उपयोगी स्निपेट है find-file:

(find-file FILENAME &optional WILDCARDS)
Interactively, or if WILDCARDS is non-nil in a call from Lisp, expand wildcards (if any) and visit multiple files.

मैं समझ नहीं पा रहा था कि zsh-स्टाइल ग्लोबिंग के साथ कैसे काम किया जाए, लेकिन यह एक अच्छा विकल्प हो सकता है।

यदि ये सभी फाइलें एकल स्रोत नियंत्रित परियोजना में हैं, तो प्रक्षेप्य एक अलग और बेहतर दृष्टिकोण हो सकता है।

पुनश्च। यदि आप एसशेल के साथ जाते हैं, तो मैं eshell-toggle-cdआपको एक कुंजी को बांधने का सुझाव दूंगा ताकि आप जिस बफ़र को संपादित कर रहे हैं, उसकी निर्देशिका में एक एशेल प्रॉम्प्ट को आसानी से पॉपअप कर सकें।


मुझे नहीं लगता कि find-fileयह पुनरावर्ती रूप से संचालित होगा, जो कि मुख्य विशेषता है, जिसके बाद मैं हूं। एक शेल खोलना और एक कमांड टाइप करना बहुत अधिक काम की तरह लगता है, क्योंकि (मैं अनुमान लगा रहा हूं) मेरी कमांड को कुछ ऐसा होना होगा for d in inc src hst { for f in $d/**/*cc $d/**/*c $d/**/*h { find-file $f } }या क्या यह उससे आसान है?
nispio
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.