पूर्व कमांड आउटपुट में grep कैसे करें?


11

पूर्व कमांड आउटपुट में पैटर्न की खोज कैसे की जाती है? उदाहरण के लिए, :scriptnamesकमांड के आउटपुट में फ़ाइल नाम पैटर्न की खोज कैसे करें ? के सभी जायके के लिए grepऔर vimgrepवहाँ केवल {file}एक जगह है जहाँ खोज करने के लिए है।

जवाबों:


6

तुम यह कर सकते थे:

:redir => scriptn | sil exe 'scriptnames' | redir end | echo(system('grep pattern',scriptn))

यह क्या करता है:

:redir => scriptn                      "redirect following output to variable scriptn
:sil exe 'scriptnames'                 "silently execute scriptnames
:redir end                             "end the redirection
:echo(system('grep pattern',scriptn))  "echo the call of grep witht that input with the pattern `pattern`

12

:filterकमांड इस के लिए एक सरल, एक-लाइन दृष्टिकोण है।

:filter /indent/ scriptnames

केवल कमांड indentके आउटपुट से पैटर्न से मेल खाती लाइनें दिखाएगा :scriptnames


मैं :redirअक्सर इन जैसे प्रश्नों के लिए मुख्य समाधान देखता हूं , जो ठीक हैं और बहुत अधिक शक्ति और विकल्प प्रदान करते हैं, लेकिन मुझे लगता है कि जब वे अधिक से अधिक बार नहीं होते हैं, तो वे थोड़े ओवरकिल होते हैं, आपको बस यह जांचने की आवश्यकता है कि क्या कुछ है। :filterपल और मृत सरल में उपयोग करने के लिए सुविधाजनक है।


2
यह क्लीनर और अधिक संक्षिप्त है।
jdhao

वास्तव में, यह स्वीकृत उत्तर होना चाहिए। (हालांकि edi9999 के उत्तर से बहुत कुछ सीखा है, इसलिए
अपवोट है

4

सबसे पहले, आपको इसके आउटपुट को हथियाने scriptnamesऔर इसे बफर में डालने की आवश्यकता है ।

आप इसके लिए उपयोग कर सकते हैं :redir:

:redir @a       " redirect output of following ex commands to register a
:scriptnames    " press G to get to the end of the output if it's too long
:redir END      " end the redirection
:vnew           " new buffer in vertical window
:put a          " put content of register
/pattern        " search for 'pattern'

उस ने कहा, एक :scriptnameआउटपुट जो आपकी अपनी आँखों से स्कैन करने के लिए बहुत लंबा है, गहरी समस्याओं का एक लक्षण हो सकता है।


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

क्षमा करें, यह न देखें कि बहुत लंबी सूची के बारे में आपका क्या मतलब है। उदाहरण के लिए उस सूची में 10 फाइलें, nddtree 13 अन्य फाइलें, आदि हैं
अल बर्जर

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

@AlBerger, एक सूची बहुत लंबे समय का मतलब बहुत अधिक प्लगइन्स और / या प्लगइन्स बहुत बड़े या खराब लिखे गए हैं। एक एकल प्लगइन के लिए 13 फाइलें बहुत ज्यादा है।
रोमेनिल

क्या आप सुझाव दे रहे हैं कि शॉर्ट NERDTreeके आउटपुट को बनाए रखने के लिए अपने सभी कार्यों को एक ही फाइल में रखना चाहिए :scriptnames? क्या यह इसे एक बेहतर लिखित प्लगइन बना देगा?
सातो कैटसुरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.