ctags दो विशेषताओं को सक्षम करता है: आपको फ़ंक्शन कॉल से उनकी परिभाषाओं तक कूदने की अनुमति देता है, और ओमनी पूर्णता। पहले अर्थ यह है कि जब आप एक विधि के लिए एक कॉल से अधिक कर रहे हैं, मार g]
या CTRL-]
जगह है जहाँ कि विधि परिभाषित या कार्यान्वित किया जाता है पर चला जाएगा। दूसरी विशेषता का मतलब है कि जब आप टाइप करते हैं foo.
या foo->
, और अगर फू एक संरचना है, तो फ़ील्ड पूर्ण होने के साथ एक पॉप-अप मेनू दिखाया जाएगा।
cscope की भी पहली विशेषता है - उपयोग करना set cscopetag
- लेकिन अंतिम नहीं। हालाँकि cscope अतिरिक्त रूप से उन स्थानों में से किसी में भी कूदने की क्षमता को जोड़ता है जहाँ किसी फ़ंक्शन को भी कहा जाता है।
जहाँ तक एक कोड बेस के इर्द-गिर्द कूदने की बात है, ctags केवल आपको कभी उस जगह की ओर ले जाएगा जहाँ फ़ंक्शन कार्यान्वित किया जाता है, जबकि cscope आपको दिखा सकता है कि फ़ंक्शन कहाँ है।
आप एक को दूसरे पर क्यों चुनेंगे? खैर, मैं दोनों का उपयोग करता हूं। ctags को स्थापित करना आसान है, तेजी से चलाने के लिए और यदि आप केवल एक तरह से कूदने के बारे में परवाह करते हैं तो यह आपको कम लाइनें दिखाएगा। आप सिर्फ :!ctags -R .
और g]
सिर्फ काम चला सकते हैं । यह उस ओमनी को पूरी तरह से सक्षम बनाता है।
Cscope बड़े, अज्ञात कोड बेस के लिए बहुत अच्छा है। सेट अप एक दर्द है क्योंकि cscope को पार्स करने के लिए फ़ाइलों के नामों की सूची वाली एक फ़ाइल की आवश्यकता होती है। इसके अलावा, डिफ़ॉल्ट रूप से, कोई कुंजी बाइंडिंग सेट नहीं हैं - आपको :cscope blah blah
मैन्युअल रूप से चलाने की आवश्यकता है ।
मुट्ठी की समस्या को हल करने के लिए मुझे एक बैश स्क्रिप्ट मिली cscope_gen.sh
है जो इस तरह दिखाई देती है:
#!/bin/sh
find . -name '*.py' \
-o -name '*.java' \
-o -iname '*.[CH]' \
-o -name '*.cpp' \
-o -name '*.cc' \
-o -name '*.hpp' \
> cscope.files
# -b: just build
# -q: create inverted index
cscope -b -q
यह उस कोड की खोज करता है जिसकी मुझे दिलचस्पी है, cscope.files सूची बनाता है और डेटाबेस बनाता है। इस तरह मैं सभी सेट अप चरणों को याद रखने के बजाय ":! Cscope_gen.sh" चला सकता हूं।
मैं इस स्निपेट के साथ ctrl-space x 2 में cscope खोज को मैप करता हूं, जो cscope के अन्य डाउनर को कम करता है:
nmap <C-@><C-@> :cs find s <C-R>=expand("<cword>")<CR><CR>
नहीं है प्लग इन को इस cscope_maps.vim समान बाइंडिंग का एक समूह तक कि सेट। मैं कभी भी याद नहीं रख सकता कि सभी विकल्पों का क्या मतलब है, इसलिए ctrl-space से चिपके रहें।
इसलिए निष्कर्ष निकालना: ctags को स्थापित करना आसान है और ज्यादातर बिना कुछ किए काम करता है, यह ओमनी-पूर्ण के लिए भी महत्वपूर्ण है। यदि आपको एक बड़ा और अधिक अज्ञात कोड आधार बनाए रखना है, तो cscope अधिक सुविधाएँ प्रदान करता है, लेकिन इसके लिए अधिक पैर की आवश्यकता होती है।
make tags
कर्नेल रूट डायर में किया और कूदने के साथ खेल रहा हूं और ज्यादातर समय गलत जगह समाप्त होता है। मैंने पढ़ा कि ctags में c प्रीप्रोसेसर के साथ समस्याएँ हैं, लेकिन यह देखते हुए कि ctags का उपयोग lxr में किया जाता है, जाहिर है कि ऐसा कुछ होना चाहिए।