वाइल्डकार्ड एक्सप्रेशन से मेल खाते कई फाइलें कैसे खोलें?


10

मैं एक ग्लोब एक्सप्रेशन से मेल खाती कई फाइलें संपादित करना चाहता हूं। उदाहरण के लिए, बाल निर्देशिकाओं में सभी गिट विन्यास फाइल को संपादित करने के लिए, मैं इसे शेल में कर सकता हूँ:

vim */.git/config

विम :कमांड लाइन में, मुझे :find */.git/configकुछ ऐसा ही करने की उम्मीद थी (यानी, ग्लोब एक्सप्रेशन से मेल खाती सभी फाइलें खोलें), लेकिन इसके बजाय यह शिकायत करता है E77: Too many file names

क्या वाइल्डकार्ड / ग्लोब एक्सप्रेशन से मेल खाने वाली कई फाइलों को खोलने के लिए वीम कमांड या वन-लाइनर है (जिसमें फ़ंक्शन लिखना शामिल नहीं है)?

जवाबों:


8

आप उपयोग कर सकते हैं :args {glob}। आपके ग्लोब में, **पुनरावर्ती निर्देशिकाओं को पीछे छोड़ देगा।

यह तर्क सूची को पॉप्युलेट करेगा, जो वही सूची है जो तर्क के रूप में एक या एक से अधिक फ़ाइल नाम से शुरू करने पर पॉप्युलेट हो जाती है।

एक बार जब आपकी तर्क सूची आबाद हो जाती है, तो आप इसका उपयोग करके :nextऔर इसके माध्यम से नेविगेट कर सकते हैं :previous। आप कमांड :firstऔर :lastकमांड के साथ पहले और अंतिम आइटम पर भी जा सकते हैं ।


1
नाइस :) :args */.git/configवास्तव में बफर लिस्ट को भी पॉप्युलेट :bnextकरता है , इसलिए काम भी करता है। क्या यह अजीब लगता है? (विम 7.4.52, और नेओविम)
जस्टिन एम। कीज़

1
दूसरों को भी एक अनुस्मारक, सूची को ]aचक्रित करें :argsयदि github.com/tpope/vim-unimpaired स्थापित है।
जस्टिन एम। कीज़

भी :argadd file*कर सकते हैं।
केनोरब

ग्लोब पैटर्न ( **) का उपयोग करने के लिए , आपको globstarसेट करने की आवश्यकता है , देखें: शेल ग्लोबिंग के साथ सभी नेस्टेड निर्देशिकाओं के तहत सभी फ़ाइलों का मिलान करें
केनोरब

@ जस्टिनएम.केय्स बफर सूची आर्ग्स सूची का एक सुपरसेट है, इसलिए यह अपेक्षित है।
jamessan

3

अलग टैब में मिलान फ़ाइलें खोलने के लिए…

:n */.git/config | tab all

स्पष्टीकरण: :n ( :next) अगली-फ़ाइल सूची को सभी मैचों के लिए सेट करता है। tab allनए टैब में अगली फ़ाइल सूची में सभी फ़ाइलें खोलता है।

… या…

for f in glob("*.py", 0, 1) | exe "tabe" f | endfor

स्पष्टीकरण: में glob(…), सभी मिलान फ़ाइलों को शामिल करने के लिए 0 का मतलब है , भले ही उन्हें अन्यथा सेटिंग्स suffixesया wildignorecaseसेटिंग्स के कारण अनदेखा किया गया हो । 1 का मतलब एक स्ट्रिंग के बजाय एक सूची वापस करना है। एक नया टैब में चर द्वारा निर्दिष्ट फ़ाइल को खोलने exe "tabe" fका एक छोटा रूप है ।execute "tabedit" ff


1
:n */.git/config | bufferकाम जैसा दिखता है ।
मतीन उल्हाक

2

विम: कमांड लाइन में, मुझे :find */.git/configकुछ ऐसा ही करने की उम्मीद थी (यानी, ग्लोब एक्सप्रेशन से मेल खाती सभी फाइलें खोलें), लेकिन इसके बजाय यह शिकायत करता है E77: Too many file names

प्रलेखन पढ़ने से पहले कुछ भी उम्मीद न करें।

टॉम के जवाब के अलावा, आप सीधे :nextएक विकल्प के रूप में उपयोग कर सकते हैं :args


0

फाइलें खोलकर vim */.git/configकाम जरूर करना चाहिए। यदि ऐसा नहीं होता है, तो आपको अपने विम को 7.4 पर अपग्रेड करना चाहिए (पिछले संस्करण अधिक छोटी गाड़ी थी)।

वैकल्पिक रूप से निम्नलिखित में से एक (संपादक के भीतर) आज़माएँ:

:n `find .git/ -name config`
:args `find . -name config`

आपने मेरा प्रश्न ध्यान से नहीं पढ़ा। और, स्वीकृत उत्तर में पहले से उल्लेख है :args
जस्टिन एम। कीज़

@ जस्टिनएम.केयस आपकी बातों के लिए धन्यवाद। वाइल्डकार्ड डिफ़ॉल्ट रूप से काम करना चाहिए और यह एकमात्र उत्तर है जो कहता है कि इसे 7.4 में काम करना चाहिए (जैसा कि मुझे अपग्रेड से पहले बिल्कुल वही त्रुटि थी)। का उपयोग करना argsकेवल वर्कअराउंड है, लेकिन आगे यह आपको दिखाता है कि शेल विस्तार का उपयोग कैसे करना है, यह स्वयं के भीतर है यदि कोई और अधिक जटिल समाधानों के लिए उपयोग करना चाहता है find, जैसे कि यह । इसलिए मुझे लगता है कि यह आपके प्रश्न के लिए कुछ अतिरिक्त मूल्य देता है। इसलिए मुझे उम्मीद है कि यह आपके साथ ठीक है।
kenorb

मेरे पास कभी कोई समस्या नहीं थी vim */foo, और ऐसा कोई तरीका नहीं है जो विम संस्करण से संबंधित हो सकता है, क्योंकि यह एक शेल विशेषता है।
जस्टिन एम। कीज़

0

जाहिर है, लेकिन ऊपर सूचीबद्ध नहीं - उदाहरण के लिए उनके नाम में create_table string वाले सभी sql फाइल्स मिलते हैं

:args **/*create_table*sql

और उनकी जांच करें

:ls

और पहले वाले को खोलो

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