2010-06-24 10 views
5

मैं निम्नलिखित कमांड में '**' वाइल्डकार्ड के साथ vim के आंतरिक grep का उपयोग करने का प्रयास करता हूं:विम: grep का वाइल्डकार्ड विंडोज़ में काम नहीं करता है

grep "test" **\*.txt 

vim निम्न त्रुटि देता है:

FINDSTR: Cannot open **\*.txt 

जब मैं '**' वाइल्डकार्ड को हटाता हूं, तो आदेश ठीक से काम करता है:

grep "test" *.txt 

मैंने बैकस्लैश को स्लेश को आगे बढ़ाने के लिए बदल दिया, लेकिन यह न तो मदद नहीं करता:

grep "test" **\*.txt 

यह उपरोक्त त्रुटि को दोबारा देता है।

कारण क्या हो सकता है?

नोट: मैं माइक्रोसॉफ्ट विंडोज एक्सपी पर जीवीआईएम 7.2 का उपयोग करता हूं।

उत्तर

5

XP के तहत विम में ": grep" करना डिफ़ॉल्ट रूप से "grep.exe" का उपयोग नहीं करता है। डिफ़ॉल्ट रूप से "FINDSTR" का उपयोग किया जाता है जो विंडोज स्थापना के भाग है। "FINDSTR" grep के लिए संगत नहीं है। इसके कारण आपको त्रुटि संदेश

FINDSTR: Cannot open **\*.txt 

देखें ": grepprg मदद करें"।

यदि आप grep के विंडोज पोर्ट का उपयोग करना चाहते हैं तो आपको इंस्टॉल करना होगा क्योंकि grep विंडोज़ का हिस्सा नहीं है और न ही Vim स्थापना का हिस्सा है।

लेकिन चूंकि 7.0 विम में एक आंतरिक grep है जिसे vimgrep कहा जाता है। विवरण के लिए ": vimgrep" देखें।

आपको तदनुसार 'grepprg' सेट करना होगा ताकि grep या vimgrep का उपयोग किया जा सके (डिफ़ॉल्ट FINDSTR के बजाय)।

+2

आपको बहुत बहुत धन्यवाद। इसने समस्या हल की: ": grepprg = internal सेट करें" –

2

स्थापित cygwin, mingw, याunxutils ग्रेप प्राप्त करने के लिए (मैं cygwin उपयोग करें)। अपने पथ में बिन निर्देशिका जोड़ें। ,

set grepprg=grep\ -nH 

(यह वही है * nix पर ग्रेप डिफ़ॉल्ट रूप से उपयोग करता है।)

इसके अलावा, अगर आप :help grep, आप का एक विवरण मिल जाएगा:

और तरह Habi said, अपने vimrc में जोड़ें grep और vimgrep के बीच मतभेद। (स्पीड बनाम पोर्टेबिलिटी और लचीलापन।)

+0

मेरे मामले में मुझे 'set grepprg = grep \ -nH' सेट करना था, लेकिन अन्यथा यह पूरी तरह से काम करता था। –

+0

@Smashd: फिक्स्ड! – idbrii

1

विंडोज, यदि आप तेजी से findstr में हुक करना चाहते हैं आप

set grepprg=findstr\ /n\ /s

अपने में उपयोग कर सकते हैं।vimrc और अब

:vimgrep methodname **/*.py (, :copen:cn/:cp, :cclose)

:grep methodname *.py

दोनों परिणाम आप QuickFix खिड़की के माध्यम से नेविगेट कर सकते हैं की एक सूची प्रदान करने के बराबर है मेरे अनुभव findstr में

vimgrep की तुलना में लगभग 30 गुना तेज है, हालांकि यह आपके प्रोजेक्ट आकार से कोई फर्क नहीं पड़ता है और vimgrep के रेगेक्स का उपयोग करने के लिए बहुत अच्छा है।

0

ध्यान दें कि: grep vim का आंतरिक grep (वह है: vimgrep) नहीं है, लेकिन बाहरी grep प्रोग्राम के लिए एक रैपर है।

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

set grepprg=C:/MinGW/msys/1.0/bin/egrep\ -nR\ $*\ * 

'$ ' जहां आपकी अभिव्यक्ति जाना होगा है, अंत में '' हर फ़ाइल प्रकार का मतलब है। Grep पर्याप्त तेज़ है या मेरा कोडबेस इतना छोटा है कि मुझे फ़ाइल प्रकारों को सीमित करने की परवाह नहीं है। -एन और -आर फ्लैग का उपयोग करके इसे vimgrep की तरह काफी परिणाम मिलेंगे (जाहिर है कि पैटर एक्सप्रेशन अलग होंगे)।

0

** को 'grepprg' में निर्दिष्ट बाहरी उपकरण द्वारा विस्तारित किया गया है, या विंडोज के मामले में, विस्तारित नहीं किया गया है क्योंकि grepprg केवल खोज उपकरण है।

लेकिन किसी भी तर्क आप विम के कमांड लाइन पर पारित भी तो बस एक पुनरावर्ती findstr खोज करते हैं उपकरण के लिए जाना,:

:grep /S pattern *.txt 
संबंधित मुद्दे