2011-02-16 3 views
49

में दाखिल नहीं दिख रहा है। मैं कमांड लाइन पर अपनी ctags फ़ाइल जेनरेट करता हूं:विम: सीटीएजी सेट अप करने में कठिनाई। उप-निर्देशिकाओं के स्रोत के साथ मैं (विपुल) आज विम पर ctags सेटअप पाने के लिए कोशिश कर रहा हूँ और कठिनाई यह ठीक से काम करने के लिए हो रही हो रहा है टैग परियोजना जड़

cd myproj 
ctags -R 

यह टैग फ़ाइल को myproj रूट में रखता है। हालांकि, जब मैं रूट पर रहता हूं तो स्रोत पर काम कर रहा हूं, तो विम केवल इस टैग फ़ाइल से पढ़ता प्रतीत होता है। मैं गहरी निर्देशिका के लिए नेविगेट के रूप में, अगर मैं <C-]> उपयोग करके किसी टैग के लिए कूद करने के लिए प्रयास करें, मैं मिलता है:

E433: No tags file 
E426: tag not found: MyClassName 

मैं यह सत्यापित किए जाने MyClassName टैग फ़ाइल में एक टैग है कि, यह सिर्फ है कि विम नहीं करता है इसे देखें। क्या कोई कृपया रूट की टैग फ़ाइल को संदर्भित करने के लिए विम को कॉन्फ़िगर कैसे कर सकता है?

धन्यवाद।

उत्तर

98
set tags=tags;/ 

यह टैग फ़ाइल के लिए वर्तमान फ़ोल्डर की जांच करेगा और मूल फ़ोल्डर को रूट फ़ोल्डर में सभी तरह से जारी रखेगा। तो आप अपनी परियोजना में किसी भी उप-फ़ोल्डर में हो सकते हैं और यह टैग फ़ाइलों को ढूंढ पाएगा।

+0

यह पूरी तरह से काम करता है। धन्यवाद। – Thomas

+2

यदि आपके पास अन्य टैग फ़ाइल हैं, तो आप टैग + = टैग सेट करना चाहते हैं;/' –

+25

यदि आप यहां आते हैं और मेरे जैसे, 'टैग्स'/'' से परेशान होते हैं, तो';/'प्रत्यय निर्देशित करने के लिए निर्देशित करता है इस मामले में, स्टॉप निर्देशिका तक टैग वाले निर्देशिका से ऊपर की ओर खोजें। यदि आप स्टॉप-डायरेक्टरी के रूप में अपनी होम निर्देशिका का उपयोग करना चाहते हैं, तो 'सेट टैग + = टैग; ~' या 'सेट टैग + = टैग; $ HOME' का उपयोग करें। या आप स्टॉप निर्देशिका के रूप में अपने प्रोजेक्ट ट्री की शीर्ष निर्देशिका का उपयोग कर सकते हैं। (सेमी-कोलन को समझने के लिए 'फ़ाइल-सर्चिंग' मदद करें।) ध्यान दें कि टैग फ़ाइल की खोज करना autochdir से प्रभावित होगा। मैं अपने .vimrc 'सेट टैग =।/टैग,।/टैग, टैग; ~, टैग्स; ~ ' –

14

विम बताने के लिए जहां टैग फ़ाइल देखने के लिए एक विकल्प नहीं है।

" search first in current directory then file directory for tag file 
set tags=tags,./tags 

मदद से निकालें:

मैं निम्नलिखित विन्यास का उपयोग '।'

एक टैग फ़ाइल नाम के साथ "./", शुरू होता है वर्तमान फ़ाइल के पथ के साथ प्रतिस्थापित किया गया है। यह निर्देशिका में टैग फ़ाइल का उपयोग करना संभव बनाता है जहां वर्तमान फ़ाइल है (कोई फर्क नहीं पड़ता कि वर्तमान निर्देशिका क्या है)। , या वर्तमान निर्देशिका में ("टैग,/टैग।") वर्तमान फ़ाइल निर्देशिका में ("./tags: विचार का उपयोग करने का " ./ "आप को परिभाषित है कि कर सकते हैं, जिसमें टैग फ़ाइल पहले की खोज कर रहा है टैग ")।

उदाहरण के लिए: :। सेट टैग =/टैग्स, टैग्स,/घर/उपयोगकर्ता/commontags

और मैं शीर्ष परियोजना निर्देशिका जहाँ मेरे tags फ़ाइल उत्पन्न होता है में अपने वर्तमान कार्यशील निर्देशिका रहते हैं।

उपयोग :pwd और फिर :cd myproj (विम के अंदर) निर्देशिका अपने टैग फ़ाइल युक्त करने के लिए जाने के लिए।

टैग पथ पर अधिक जानकारी के लिए :help tags-option देखें।

आप इस मुद्दे को शायद यह है कि आप या तो गलत निर्देशिका में कर रहे हैं, या अपने tags विकल्प ठीक से सेट नहीं है।

+0

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

1

यदि आप प्रत्येक परियोजना के लिए एक टैग फाइल उत्पन्न, तो आप इस पैटर्न पसंद कर सकते हैं, खासकर यदि आप विभिन्न मशीनों भर में अपने .vimrc का हिस्सा:

let repohome=substitute($REPO_HOME, "\/", "\\\\/", "g")       
let &tags=substitute(expand("%:p:h"), "\\(".repohome."/.\\{-}\/\\).*", "\\1tags", "") 

तो आप में वातावरण चर $ REPO_HOME सेट करने के लिए होगा अपने .bashrc आपकी मुख्य रेपो निर्देशिका पीछे की जगह (उदा।/home/<yourusername>/repos) और यह स्वचालित रूप से 1 की गहराई के साथ $ REPO_HOME की प्रत्येक उपनिर्देशिका में एक टैग फ़ाइल की तलाश करेगा, उदा। /home/<yourusername>/repos/myproj/tags

1
#!/bin/sh 

FREEZE_NAME=/* Give some version number */ 

mkdir $HOME/ctags/$FREEZE_NAME 

V1=/* Software Path */ 

find $V1 -name "*.h" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/h.tags 

find $V1 -name "*.c" | xargs /usr/local/bin/ctags -a -f $HOME/ctags/$FREEZE_NAME/c.tags 

cd $HOME/ctags/$FREEZE_NAME/ 

rm -f all.tags 

cat c.tags h.tags >> all.tags 

sort all.tags > temp.tags 

mv temp.tags all.tags 

rm -f c.tags h.tags 

एक .sh फ़ाइल में उपरोक्त कोड रखो और चलाने ... यह यकीन है कि के लिए अपने टैग उत्पन्न होगा।

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

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