2010-03-02 15 views
10

मैं, विम करने के लिए Windows पीएचपी विशेष संपादक से स्विच कर रहा हूँ के दर्शन पर "सब कुछ के लिए एक संपादक का उपयोग और यह वास्तव में अच्छी तरह से सीख सकते हैं।"फ़ाइलों में खोजने और बदलने के लिए महान उपकरण?

हालांकि, एक विशेषता मैं अपने पीएचपी संपादक में इसे पसंद किया अपने 'खोजें और बदलें "क्षमता थी।

  • बस लगता है: मैं चीजों को दो तरीके से संपर्क कर सकता है। किसी स्ट्रिंग के लिए किसी प्रोजेक्ट में सभी फ़ाइलों को खोजें, सूचीबद्ध सभी घटनाओं को देखें, और उस फ़ाइल में उस फ़ाइल में गोता लगाने के लिए क्लिक करें।
  • आँख बंद करके "बार" के साथ "foo" की सभी घटनाओं की जगह।

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

, और बैश के साथ इसे टुकड़ा करने की कोशिश कर रहा है बहुत कठिन है। करने योग्य, लेकिन थकाऊ।

किसी को भी इस तरह बातों के लिए किसी भी महान उपकरण, लिनक्स और/या विंडोज के लिए पता है? (मैं वास्तव में यदि संभव हो तो एक जीयूआई पसंद करेंगे।) या कि, एक bash स्क्रिप्ट कि काम अच्छी तरह से करता है में नाकाम रहने के? (यदि यह फ़ाइल नामों और रेखा संख्याओं को सूचीबद्ध करेगा और कोड स्निपेट दिखाएगा, तो यह बहुत अच्छा होगा।)

+0

यदि आप जीयूआई का उपयोग करना चाहते हैं तो मैं गंभीरता से विम का उपयोग नहीं करने पर विचार करता हूं, क्योंकि यह एक बहुत कमांड लाइन उन्मुख टूल है। ग्रहण या दृश्य स्टूडियो की तरह कुछ शायद आपके उपयोग के मामले को बेहतर तरीके से फिट करेगा। –

+0

@ सेमुस - मुझे पहले से ही विम पसंद है - कीबोर्ड का उपयोग करके जल्दी से काम करने में सक्षम होना बहुत अच्छा है। लेकिन मेरे द्वारा उपयोग किए जाने वाले अधिकांश आदेश एक या दो कीस्ट्रोक हैं। यदि मैं इसे संक्षिप्त, याद रखने योग्य कमांड के साथ बैश या विम में कर सकता हूं, तो यह ठीक होगा। मैं हर बार एक लंबी बैश प्रोग्राम लिखना नहीं चाहता हूं जब भी मैं अपनी सभी फाइलों में 'foo_function() 'ढूंढना चाहता हूं। –

+0

तो आप विम के बाहर कुछ कमांड चलाने के साथ ठीक रहेगा, या आप एक प्लगइन की तरह कुछ ढूंढ रहे हैं जो विम के अंदर काम करेगा? –

उत्तर

7

विम में बाहरी grep प्रोग्राम का उपयोग करने के लिए :vimgrep (या :grep) का उपयोग करके बहु-फ़ाइल खोज बनाई गई है - यह विम 7 से पहले एकमात्र विकल्प है)।

:vimgrep एक regex के लिए फ़ाइलों के माध्यम से खोज और एक बफर में मिलान की सूची लोड होगा - आप तो या तो नेत्रहीन बफर में या :cnext और :cprev आदेशों के साथ परिणामों की सूची नेविगेट कर सकते हैं। यह ** वाइल्डकार्ड के साथ निर्देशिका पेड़ के माध्यम से खोज का समर्थन करता है। जैसे

:vimgrep "^Foo.*Bar" **/*.txt 

फू के साथ शुरू होने वाली लाइनों की खोज और वर्तमान निर्देशिका के तहत किसी भी .txt फ़ाइल में बार युक्त खोज के लिए।

:vimgrep अपने परिणामों को संग्रहीत करने के लिए 'quickfix' बफर का उपयोग करता है। :lvimgrep भी है जो स्थानीय बफर का उपयोग करता है जो आपके द्वारा उपयोग की जा रही विंडो के लिए विशिष्ट है।

विम बॉक्स से बाहर बहु-फ़ाइल को प्रतिस्थापित नहीं करता है, लेकिन ऐसे प्लगइन हैं जो vim.org पर भी ऐसा करेंगे।

+1

हाँ - सबसे अच्छा हिस्सा यह है कि एक बार यह पाता है सभी मैचों, ** आप टाइप कर सकते हैं: उन्हें नीचे की खिड़की में सभी को देखने के लिए कोपेन करें, फिर एक को हाइलाइट करें और उस फ़ाइल पर कूदने के लिए एंटर दबाएं।** (आप कई फाइलों में मैचों के बीच चक्र का उपयोग कर सकते हैं: सीएन और: सीपी) –

+0

इसके अलावा - परिणाम सूची लाइन नंबर और कोड स्निपेट दिखाती है, जैसा कि मैंने अनुरोध किया था। खोज परिणामों से संपादन विंडो में विम में किसी भी दो विंडो की तरह ले जाएं (जैसे उपयोग करते समय: विभाजन) - सीटीएल-डब्ल्यू और एक दिशा। मैं इस बारे में इतना पंप हूँ! –

8

sed की कोशिश करें। उदाहरण के लिए:

sed -i -e 's/foo/bar/g' myfile.txt 
+0

इसके अलावा: ढूंढें। -नाम "* .php" | xargs sed -i -e/foo/bar/g ' –

+0

श्राप ... आप मुझे इसे हराया! ;) –

+0

कोनराड: मैंने एक छोटा सा चिल्लाया: 'ढूंढें। -नाम "* .txt" | xargs sed -i '-e's/fo0/bar/g''। मैंने 'i 'को' i' के तर्क के रूप में प्रदान किया, जिसका अर्थ है "बैकअप फ़ाइल न बनाएं।" मुझे परवाह नहीं है क्योंकि मेरी परियोजना संस्करण नियंत्रण में है, इसलिए बैकअप फाइलें अव्यवस्थित होंगी, गिट मुझे दिखाएगी कि क्या बदल गया है। –

0

sed ... शक्तिशाली कमांड लाइन उपकरण है जो आप के लिए क्या देख रहे हैं के सबसे को पूरा करना चाहिए ... अपने समर्थन regex में देखो, तो अपनी ढूँढ़ें/बदलें काफी आसान है। (sed आदमी)

4

Notepad++ मुझे खोज और एक संपूर्ण फ़ोल्डर (और सबफ़ोल्डर) में बदलने के लिए, regex समर्थन के साथ की अनुमति देता है।

1

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

:grep 'Function1' myproject/ 

यह अनिवार्य रूप से एक ग्रेप चलाता है और आप जल्दी से जहां यह पाया गया है स्थानों के लिए/से कूद की सुविधा देता है।

सीटीएजी एक ऐसा उपकरण है जो आपके कोड में घोषणाएं पाता है और फिर इन घोषणाओं पर कूदने की अनुमति देता है। ऐसा करने के लिए, ctags चलाएं और फिर अपने कर्सर को फ़ंक्शन कॉल पर रखें और फिर Ctrl-] का उपयोग करें।

http://www.davedevelopment.co.uk/2006/03/13/vim-ctags-and-php-5/

0

Notepad ++ कई भाषाओं में प्रकाश डाला वाक्य रचना के लिए समर्थन किया है और खोजने के लिए और regex and basic \n \r \t support साथ सभी खुले फ़ाइलों में बदलने के समर्थन करता है: यहां कुछ और ctags जानकारी के साथ एक कड़ी है।

0

कमांड grep -rn "search terms" * सभी फ़ाइलों (उप-निर्देशिकाओं सहित) में निर्दिष्ट शर्तों की खोज करेगा और फ़ाइल नाम और लाइन नंबर सहित मिलान लाइनों को वापस कर देगा। इस जानकारी के साथ सशस्त्र, वीआईएम में किसी विशेष फ़ाइल/लाइन पर कूदना आसान है।

जैसा कि पहले उल्लेख किया गया था, sed खोज-और-प्रतिस्थापन करने के लिए बेहद शक्तिशाली है।

आप इन दोनों उपकरणों को वीआईएम के अंदर से भी चला सकते हैं।

0

कुछ डेवलपर्स जो मैं वर्तमान में Textpad द्वारा कसम खाता हूं। इसमें यूआई है और रेगेक्स का उपयोग करने का भी समर्थन करता है - जो कुछ आप खोज रहे हैं और बहुत कुछ।

+0

हाँ! टेक्स्टपैड जाओ! – dwo

2

आप फ़ाइलों में टेक्स्ट को प्रतिस्थापित करने के लिए कमांड प्रॉम्प्ट में perl का उपयोग कर सकते हैं।

perl -p -i".backup" -e "s/foo/bar/g" test.txt 
+0

पूरी तरह से काम करता है! – ereOn

+0

'perl -pi -e '/ foo/bar/g' file'। 'Nback सिस्टम पर' .backup "' की आवश्यकता नहीं है। – Zaid

5

मुझे नहीं पता कि आप वीआईएम के साथ ऐसा क्यों नहीं कर सकते हैं।

बस

/Foo 

हाइलाइट्स फू की सभी आवृत्तियों का पता लगाएं फ़ाइल में और आप आप क्या चाहते हैं कर सकते हैं।

आँख बंद करके बदलें

:% s/Foo/Bar/g 

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

+3

विम खोज और वास्तव में अच्छी तरह से प्रतिस्थापित कर सकते हैं, लेकिन कई फाइलों में नहीं। sed शायद उस के लिए पसंद का साधन है। – Jay

+1

आपको ऑल-इंस्टेंस हाइलाइटिंग चालू करने के लिए 'hlsearch' सेट करना पड़ सकता है। –

+0

@Jay: वीआईएम मूल रूप से grep के कई स्वादों का समर्थन करता है जो बहु-फ़ाइल खोज को सक्षम बनाता है। देखें http://vim.wikia.com/wiki/Find_in_files_within_Vim –

0

एक बहुत उपयोगी खोज उपकरण ack है। (उबंटू के रूप में "पावती-grep" खजाने और आदमी पन्नों में यह करने के लिए संदर्भित करता है।)

यह क्या करता है की लघु संस्करण find और grep कि अधिक शक्तिशाली और है कि इस जोड़ी की तुलना में बुद्धिमान है का एक संयोजन है।

2

चूंकि आप एक जीयूआई उपकरण की तलाश में हैं, इसलिए मैं आमतौर पर निम्नलिखित 2 टूल्स का उपयोग करता हूं। उनमें से दोनों में बड़ी कार्यक्षमता है जिसमें वाइल्डकैट मिलान, रेगेक्स, फ़ाइल टाइप फ़िल्टर इत्यादि शामिल हैं। उनमें से दोनों फाइलनाम/लाइनों जैसी फ़ाइलों में हिट के बारे में अच्छी उपयोगी जानकारी प्रदर्शित करते हैं।

  1. विजुअल स्टूडियो: तेज़ अभी तक शक्तिशाली। यदि फ़ाइल संख्या बहुत बड़ी है (कहें, हजारों ...)

  2. pspad: हल्के वजन। और pspad के लिए ढूंढने/प्रतिस्थापित करने के बारे में एक अच्छी सुविधा यह है कि यह पेड़ पदानुक्रम में विभिन्न फ़ाइलों में हिट व्यवस्थित करेगा, जो बहुत स्पष्ट है।

+0

इस टिप्पणी को कम क्यों करें? –

1

अगर यह आप के लिए एक विकल्प है मैं नहीं जानता, लेकिन अगर आप vim *.php साथ vim में अपने सभी फ़ाइलें लोड से आप

:set hidden

:argdo %s/foo/bar/g => निष्पादित करेंगे कर सकते हैं सभी खुले बफर में substitue कमांड

:wall => सभी खुले बफर

लिखेंगे

या बजाय :help vimgrep कोशिश करते हैं और :help argdo और :help argadd

1

के cominbation Windows के लिए vim में अपने सभी फ़ाइलों को लोड करने की, मुझे लगता है कि grepWin हरा करना मुश्किल है - विंडोज के लिए एक शक्तिशाली और लचीला ग्रेप उपकरण के लिए एक जीयूआई। यह खोज करता है, और प्रतिस्थापित करता है, नियमित अभिव्यक्तियों के बारे में जानता है, उस तरह की चीजें।

+0

मेरे वर्तमान उद्देश्यों के लिए, यह बहुत अच्छा काम करता है। –

संबंधित मुद्दे