2009-11-17 15 views
8

मैं अपने प्रोजेक्ट में मनमाने ढंग से उपनिर्देशिका में vim शुरू करने में सक्षम होना चाहता हूं और इसे tags फ़ाइल के लिए प्रोजेक्ट रूट पर खोजना चाहता हूं, और फिर बाहर एक असंबंधित निर्देशिका में खोजना चाहता हूं परियोजना पेड़कॉम्प्लेक्स सीएजीएस खोज पथ सेट करने के लिए टिप्स

उदाहरण के लिए मान लीजिए कि मैं निम्नलिखित डालते हैं:

~/projects/foo/bar/baz.c 
~/projects/foo/tags 
~/some/arbitrary/path/tags 

मैं bar उपनिर्देशिका के भीतर से baz.c खोलना चाहते हैं, यह foo/tags ढूंढने के लिए ऊपर खोज और फिर some/arbitrary/path/tags खोज करने के लिए करता है, तो प्रतीक नहीं मिला है foo/tags में।

अब मुझे पता है मैं क्या कर सकते हैं:

set tags=./tags,tags; 

पहले कार्य को पूरा करने। यह स्पष्ट रूप से अर्धविराम है जो रूट को खोजने के लिए विम को बताता है। हालांकि निम्नलिखित काम का न:

set tags=./tags,tags,~/some/arbitrary/path/tags; 
set tags=./tags,tags;~/some/arbitrary/path/tags 

जबकि दूसरा एक ही परियोजना जड़ में टैग फ़ाइल में प्रतीकों पाता पहले एक ही ~/some/arbitrary/path/tags से प्रतीकों पाता है।

कोई भी यह कैसे जानता है? मैं लिनक्स पर रास्ता खरीद रहा हूँ।

+0

हम्म, मुझे नहीं लगता कि सिमिकोलन सही है। क्या आप वाकई वर्तमान निर्देशिका में हैं जो आपको लगता है कि आप अंदर हैं? कोशिश करें: vim के भीतर से pwd। मैं सापेक्ष और पूर्ण पथ दोनों के साथ वर्षों से अल्पविराम से अलग कई टैग का उपयोग कर रहा हूं। – Benj

उत्तर

5

मैं का उपयोग करें: एक विशेष परियोजना के रूट में टैग पैदा करने के लिए

set tags=~/.tags 
set tags+=~/.vim/tags/cpp 
set tags+=~/src/git/gitsrc/tags 
" and so on... 

:

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 

मैं C++ code completion vim tip से इस स्थापना अनुकूलित।

+1

सेट कमांड को कई लाइनों में विभाजित करने से मेरे लिए समस्या हल हो गई। मैं अपने '.vimrc' में' सेट टैग = टैग; 'के साथ समाप्त हुआ और फिर vim के भीतर से' सेट टैग + = ~/कुछ/मनमानी/पथ/टैग' टाइप कर रहा हूं। –

0

टिल्ड को अपने घर के रास्ते से प्रतिस्थापित करें।

+0

क्षमा करें, काम नहीं करता है। मैंने 'सेट टैग =।/टैग, टैग,/होम/माइयूसर/कुछ/मनमानी/पथ/टैग;' और 'सेट टैग =।/टैग, टैग;/होम/माइयूसर/कुछ/मनमानी/पथ/टैग ' –

+0

आप इसका परीक्षण कैसे कर रहे हैं? वास्तव में क्या हो रहा है? मैंने अपनी प्रोग्रामिंग निर्देशिका में एक टैग फ़ाइल बनाई है, टिल्ड का उपयोग शुरुआती बिंदु के रूप में करते हुए, "सेट टैग" में उस पथ को शामिल करने के लिए मेरे .vimrc को संपादित किया है। फिर, मैंने अपनी होम निर्देशिका में एक डमी फ़ाइल, test.c बनाई है (इसलिए, टैग फ़ाइल के साथ निर्देशिका में नहीं), टैग फ़ाइल में सूचीबद्ध एक फ़ंक्शन का नाम लिखा है, और "ctrl-] दबाया गया है "समारोह पर कर्सर के साथ। मुझे सही जगह ले ली जहां यह माना जाता था। – Derek

+0

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

0

आपका पहला "सेट टैग" विकल्प लिनक्स में मेरे लिए काम करता है। (जैसा कि मैंने इसे पहले किया है, और मैंने इसे सुनिश्चित करने के लिए अभी बनाया है।) आप अपने टैग विकल्प में पूर्ण और रिश्तेदार दोनों के कई अलग-अलग पथ प्राप्त कर सकते हैं। हालांकि, दूसरे में, आपके पास सूची के मध्य में अर्धविराम है, जो गलत है। वास्तव में, आपको किसी अर्द्ध-कोलन की आवश्यकता नहीं है। मैं आपके घर के पूर्ण पथ के साथ ~ को प्रतिस्थापित करता हूं, बस मामले में, और अर्धविराम को एक साथ हटा देता हूं। बस प्रत्येक पथ के बीच अल्पविराम है।

ओह, और टैग फ़ाइल के लिए निर्देशिका खोजने के लिए, आपको "../tags", "./tags" की आवश्यकता नहीं है। एक बिंदु का मतलब वर्तमान निर्देशिका है, दो बिंदुओं का मतलब निर्देशिका से एक है जहां आप हैं।

+0

क्या आप इसे पोस्ट कर सकते हैं कि आपने इसे कैसे बनाया है क्योंकि मैं इसे काम करने के लिए प्रतीत नहीं कर सकता। –

+0

क्या आप प्रोजेक्ट रूट से या उपनिर्देशिका से फ़ाइल खोल रहे हैं? मैं प्रोजेक्ट में उपनिर्देशिका के भीतर से फ़ाइल खोल रहा हूं, प्रोजेक्ट रूट नहीं। –

+0

यह मेरे पास है: सेट टैग =।/टैग,/टैग, टैग, टैग, ~/प्रोग्रामिंग/मंडलब्रॉट/मुख्य/टैग जहां अंतिम निर्देशिका पूर्ण पथ है। जैसा कि मैंने ऊपर बताया है, यह किसी भी मूल निर्देशिका में नहीं खोजेगा, क्योंकि मैं ../tags का उपयोग नहीं कर रहा हूं। – Derek

0

टैग फ़ाइल हमेशा परियोजना/निर्देशिका में है? यदि ऐसा है, तो आपको टैग फ़ाइल खोजने के लिए "खोज" करने की आवश्यकता नहीं है। इस तरह दोनों फ़ाइलों को बस मुश्किल कोड पथ:

set tags=/home/you/projects/**;/home/you/projects,/home/you/some/arbitrary/path/tags 

मैं प्रयास नहीं किया है इस ताकि आप इसे के साथ प्रयोग करना पड़ सकता है:

set tags=/home/you/projects/foo/tags;/home/you/some/arbitrary/path/tags 

यदि नहीं, तो आप कुछ इस तरह की कोशिश कर सकते हैं। काम करने के लिए कुछ पूर्व-स्थितियां हैं। देखें: फ़ाइल-खोज में मदद करें।

0

सेट टैग के लिए एक पंक्ति वाक्य रचना होना चाहिए:

set tags=./tags,tags;,~/some/arbitrary/path/tags 

अल्पविराम के बाद याद आ रही थी "टैग,"

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