2011-11-27 13 views
13

मेरे पास मेरी परियोजनाएं/srv/http/dev फ़ोल्डर में हैं।वीआईएम सेट ctags .vimrc

$ ctags -R --languages=php . 

अब मैं ctags पथ सेट:: मैं एक परियोजना के लिए ctags फ़ाइल उत्पन्न

:set tags=/srv/http/dev/proj/tags 

और यह ठीक काम कर रहा है।

लेकिन मेरे पास dev/फ़ोल्डर में कई प्रोजेक्ट हैं। मैं .vimrc फ़ाइल में ctags कैसे सेट कर सकता हूं? set tags=tags ठीक से काम नहीं कर रहा है।

और मैं चयनित NERDTree फ़ोल्डर पर हॉटकी दबाकर टैग फ़ाइल जेनरेट करना चाहता हूं। मैंने कोशिश की:

nmap <silent> <F4> 
    \ :!ctags -R 
    \ --languages=php .<CR> 

लेकिन यह घर फ़ोल्डर में टैग फ़ाइल बनाता है और स्कैनिंग घर फ़ोल्डर के बारे में चेतावनी से पता चलता ..

संपादित करें: @Alexandru Plugaru सलाह दी जैसा कि मैंने जी का उपयोग करना चाहिए: NERDTreeFileNode.GetSelected () समारोह।

मैं सिर्फ नौसिखिया उपयोगकर्ता हूं, इसलिए मेरे पास एक और सवाल है। मैं अपने .vimrc फ़ाइल में जोड़ लिया है:

function createTags() 
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str 
    exec ':!ctags -R --languages=php ' . curNodePath 
endfunction 
nmap <silent> <F4> :execute createTags()<CR> 

लेकिन F4 पर दबाकर मैं देख रहा हूँ:

E117: Unknown function: createTags 
E15: Invalid expression: createTags 

संपादित करें 2: धन्यवाद @Alexandru Plugaru को मैं यह मिल गया:

function CreateTags() 
    let curNodePath = g:NERDTreeFileNode.GetSelected().path.str() 
    exec ':!ctags -R --languages=php -f ' . curNodePath . '/tags ' . curNodePath 
endfunction 
nmap <silent> <F4> :call CreateTags()<CR> 

और यह काम करता है! F4 दबाकर मुझे प्रोजेक्ट फ़ोल्डर में टैग फ़ाइल मिलती है।

+1

कोशिश करें: कॉल बनाएंगैग() को पूंजी पत्र के साथ फ़ंक्शन नाम देने का भी प्रयास करें। –

उत्तर

3

ऐसा इसलिए है क्योंकि vim की वर्तमान निर्देशिका होम निर्देशिका है। आपको या तो पथ बदलने या nerdtree प्लगइन बनाने की जरूरत है। उदाहरण के लिए nerdtree_plugin निर्देशिका देखें। मुझे लगता है कि आप इस समारोह दिलचस्प मिल जाएगा:

g:NERDTreeFileNode.GetSelected()

+0

धन्यवाद, मुझे लगता है कि मुझे यही चाहिए। क्या आप अधिक प्रश्न पर उत्तर दे सकते हैं? मेरा संपादन देखें। –

+0

मैंने मूल पोस्ट –

-1
अपने .vimrc उपयोग में

:

set tags+=tags,/srv/http/dev/proj/tags 

मुझे विश्वास है कि अल्पविराम उचित विभाजक है।

+0

ठीक है, यह काम करता है। लेकिन एक और परियोजनाओं के बारे में क्या। नई परियोजना बनाने के बाद मुझे इस नई परियोजना में पूरा रास्ता जोड़ना होगा? और फिर बार-बार? हो सकता है कि यह स्वचालित हो सकता है? –

+0

'./tags;' का उपयोग करते हुए जैसा कि किसी अन्य उत्तर में उल्लिखित है, .vimrc में हार्ड-कोडिंग पथों के लिए अत्यधिक बेहतर है। –

+0

आप https://github.com/embear/vim-localvimrc का उपयोग प्रति परियोजना "स्थानीय vimrc" करने के लिए भी कर सकते हैं जहां आप विभिन्न टैग परिभाषित करते हैं। –

28
  1. कार्य बड़े अक्षर से शुरू करने वाले हैं। createTags से CreateTags बदलें।

  2. परियोजना विशिष्ट उपयोग करने के लिए tags फ़ाइलें आप अपने .vimrc को ऐसा ही कुछ जोड़ने की आवश्यकता होगी:

    set tags=./tags,tags; 
    
    ताकि विम पहले और आगे और आगे वर्तमान निर्देशिका में एक tags फ़ाइल के लिए लग रहा है यह जब तक

    इसे पाता है Additionnaly, मुझे set autochdir पसंद है: कार्यशील निर्देशिका हमेशा एक मौजूदा फ़ाइल वाली होती है।

+0

पर जवाब दिया, मैं समझता हूं कि आपका क्या मतलब है, लेकिन मैं समझ नहीं पा रहा हूं कि इसे कैसे किया जाए) मैंने अपनी .vimrc फ़ाइल में 'टैग टैग =।/टैग, टैग' और 'ऑटोचोडर सेट' सेट किया। लेकिन टैग्स की स्थापना नहीं की गई क्योंकि विम उन्हें/घर से ढूंढना शुरू कर देता है .. –

+0

विम घर से शुरू होता है क्योंकि यह शायद कामकाजी निर्देशिका है। 'Pwd' क्या कहता है? – romainl

+0

': pwd' वर्तमान में संपादन फ़ाइल की सही निर्देशिका आउटपुट करता है .. –