2009-08-10 12 views
9

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

मैं कैसे वर्तमान में मेरे टैग फ़ाइल प्रबंधन:

  1. मैं एक अखंड टैग फ़ाइल ~/.vim/tags
  2. पर मेरे घर फ़ोल्डर में संग्रहीत जब मैं अपने कोड या परिवर्तन परियोजनाओं को अद्यतन मैं एक स्क्रिप्ट है कि हटाता चला पुरानी टैग फ़ाइल और मोनोलिथिक टैग फ़ाइल को पुन: उत्पन्न करती है (आपको परियोजनाओं को बदलने के दौरान सीटीएजी निष्पादित करने के स्थान को बदलना होगा)

एक मोनोलिथिक टैग फ़ाइल का काम करना मेरे लिए है क्योंकि यह मुझे वर्तमान परियोजना के लिए सभी प्रासंगिक प्रतीकों पर कूदने देता है जिस पर मैं काम कर रहा हूं।

क्या एक एकल मोनोलिथिक टैग फ़ाइल बड़े/बड़े कोडबेस के लिए काम नहीं करेगी? एक बड़ी टैग फ़ाइल बड़ी/बड़ी कोडबेस पर क्यों काम नहीं करेगी?

अपनी टैग फ़ाइल (या टैग फाइल बहुवचन) को प्रबंधित करने के अन्य तरीके क्या हैं?

और आपकी टैग फ़ाइलों को प्रबंधित करने के लिए आपकी नई विधि बेहतर क्यों होगी? (संभवतः एक बेहतर समाधान कभी कभी अधिक जटिल हो जाएगा। तो अपने समाधान अपने टैग फ़ाइलों के प्रबंधन के लिए एक अधिक जटिल विधि के लिए अतिरिक्त लाभ है क्या और अधिक जटिल मैं तुम्हें पूछ रहा हूँ है अगर।)


पी.एस. मुझे "vimctags-tips-and-tricks" नामक ctags के बारे में बात करते हुए एक स्टैक ओवरफ्लो प्रश्न मिला लेकिन यह प्रश्न आपकी टैग फ़ाइलों को प्रबंधित करने के तरीके के बारे में बात नहीं करता है।

उत्तर

7

मैंने प्रोजेक्ट निर्देशिका में अपनी tags फ़ाइल डाली। यह प्रत्येक परियोजना के लिए टैग अलग रखता है।

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

+1

+1। मैं भीस्कोप का उपयोग करता हूं - और एक तीन-लाइनर खोल स्क्रिप्ट है जो दोनों बेवकूफ बनने के लिए फ़ाइलों को दोबारा शुरू करती है। –

1

ग्रेग की तरह, मैं प्रोजेक्ट निर्देशिका में टैग फ़ाइल रखता हूं। मैं project प्लगइन का उपयोग in= टैग के साथ टैग फ़ाइल स्थान सेट अप करने के लिए करता हूं और विभिन्न परियोजनाओं के लिए tags और cscope.out पुन: उत्पन्न करते समय रिकर्सन का उपयोग करना है या नहीं।

मैं आमतौर पर केवल टैग फ़ाइल को अद्यतन करता हूं जब महत्वपूर्ण परिवर्तन हुए होते हैं क्योंकि टैग आमतौर पर आपको सही रेखा (या कम से कम लगभग सही रेखा) तक पहुंच जाएगा, भले ही यह पुराना हो। अपडेट करने का मुख्य कारण यह है कि यदि मैंने एक नया एनम, स्ट्रक्चर या इसी तरह जोड़ा है और मैं अपडेट होने के लिए tag syntax highlighting चाहता हूं।

10

सीटीएजी फाइलें उत्पन्न करने के लिए वीसीएस (वर्जन कंट्रोल सिस्टम) हुक का उपयोग करने वाला एक दृष्टिकोण मैं हाल ही में शौकीन बन गया हूं। मैं छोटी परियोजनाओं और यहां तक ​​कि स्थानीय रूप से भी गिट का उपयोग करता हूं, और इसलिए जब भी मैं प्रतिबद्ध करता हूं तो सीटीएजी अपडेट हो जाता है (यह स्पष्ट रूप से, अन्य सभी वीसीएस के साथ संभव है)।

मैं व्यक्तिगत रूप से प्रत्येक प्रोजेक्ट की निर्देशिका में ctags फ़ाइल रखना पसंद करता हूं, लेकिन इस दृष्टिकोण को वैश्विक स्तर पर भी काम करना चाहिए।

EDIT: वीसीएस हुक स्क्रिप्ट या प्रोग्राम हैं जो कुछ क्रियाएं निष्पादित करते हैं, जैसे चेकआउट, प्रतिबद्ध, रिवर्ट और अन्य।

हुक आम तौर पर उन सभी वीसीएस में उपलब्ध होते हैं जिन्हें मैंने टक्कर दी है, और मुझे यकीन है कि आप जिस व्यक्ति का उपयोग करना चाहते हैं उसके लिए दस्तावेज ढूंढ पाएंगे।

+0

मुझे नहीं पता कि "वीसीएस हुक" क्या हैं। हो सकता है कि आप वीसीएस हुक पर थोड़ा और विस्तार कर सकें और यह टैग करने के लिए टैग को फिर से कैसे जानना है? –

+0

मैंने उत्तर अपडेट किया है और आशा है कि यह अब और जानकारी प्रदान करेगी। यदि आवश्यक हो तो मुझे और स्पष्टीकरण देने में खुशी होगी। – spatz

+0

क्लाइंट साइड या सर्वर साइड हुक? मुझे लगता है कि क्लाइंट साइड आप जो करना चाहते हैं उसके लिए बेहतर है, लेकिन सबवर्सन क्लाइंट-साइड नहीं करता है। –

0

विम प्लगइन्स को छोड़कर जिसके लिए मेरे पास केवल एक टैग फ़ाइल है, मेरे पास प्रति परियोजना एक सीटीएजी डेटाबेस भी है।

  1. "परियोजनाओं" पता लगाने के लिए और उसके अनुसार की स्थापना एक vim स्थापित करने के लिए एक तरह से:

    यह दो बातें निकलता है। ऐसा करने में सक्षम plenty plugins हैं।

  2. एक साथ विभिन्न परियोजनाओं के लिए अलग-अलग सेटिंग्स रखने का एक तरीका। यही वह जगह है जहां setlocal tags=... (/ setlocal tags+=) इसका हिस्सा निभाता है।

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

वास्तव में फ़ाइल को सहेजते समय केवल एक विशिष्ट टैग डेटाबेस अपडेट करना चाहिए, हमें कई अड्डों के लिए टैग एक बार में लेना पड़ सकता है। यह एक उपयोग का मामला है जब मैं पुस्तकालयों/परियोजनाओं पर काम कर रहा हूं जो एक दूसरे पर निर्भर करता है: मुझे अक्सर आयात करने वाले (~ तृतीय पक्ष) कोड में कुछ जांचना होगा। मैं वैश्विक &tags विकल्पों का उपयोग कर सकता था, लेकिन मैंने अलग-अलग बफर में अलग-अलग मान रखने के लिए (अभी के लिए) चुना है। एक बार फिर, इस उपयोग के मामले को स्थानीय-vimrc प्लगइन का उपयोग करने के लिए धन्यवाद का ख्याल रखा गया है।

टैग डेटाबेस को अद्यतन करने के संबंध में, यह (जो मैं बनाए रख रहा हूं, लेकिन समान क्षमताओं वाले अन्य मौजूद हैं) में किया गया है: मैं संबंधित प्रोजेक्ट टैग डेटाबेस से वर्तमान फ़ाइल से जुड़े टैग को हटा देता हूं, फिर मैं अपडेट करता हूं पृष्ठभूमि में -a विकल्प के साथ। प्रत्येक बार जब हम फ़ाइल सहेजते हैं तो पूरी परियोजना को पार्स करने की ज़रूरत नहीं है।

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

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