2011-09-12 13 views
9

निम्नलिखित कोड को देखते हुए:क्या विम में संभावित अनुमानित सीटीएजी कूद रहा है?

// MyClass.h 
class A { 
    void foo(); 
} 

class B { 
    void foo(); 
} 

// MyClass.cpp 
void main() { 
    A a(); 
    a.foo(); 
} 

कि मैं vim उपयोग कर रहा हूँ और मेरे ctags, उत्पन्न करता है, तो मैं main() में foo() पर मेरे कर्सर रखें और ctrl+] मारा है को देखते हुए, मैं foo के कार्यान्वयन की एक सूची मिल जाएगा , क्योंकि एक से अधिक हैं। अगर केवल एक ही था, तो यह तुरंत उस कार्यान्वयन के लिए कूद जाएगा।

वहाँ a के प्रकार के लिए vim में एक तरह से इस तरह के inferenced जा सकता है कि जब मैं ctrl+] मारा, इसे तुरंत A::foo() के कार्यान्वयन के लिए नहीं बल्कि मेरे विकल्पों की एक सूची के साथ की आपूर्ति की तुलना में कूदता है? ऐसा लगता है कि इस तरह की एक प्लगइन मौजूद होना चाहिए और मैं इसे खोजने में असमर्थ हूं।

अद्यतन: ऐसा प्रतीत होता है कि वर्तमान में इस समस्या का कोई समाधान नहीं है, इसलिए मैंने नीचे एक्सीक्ली के उत्तर का चयन किया है। क्या समाधान स्वयं उपस्थित होना चाहिए और एक नया उत्तर उपलब्ध कराया जाना चाहिए, मैं इस प्रश्न का उत्तर अपडेट कर दूंगा।

+0

मैंने ऐसा कुछ भी नहीं देखा है जो इसकी अनुमति देता है। यह पाइथन के लिए एक स्क्रिप्ट-आधारित प्लगइन के माध्यम से संभव हो सकता है। मैं निश्चित रूप से निश्चित रूप से नहीं जानता, इसलिए मैं – Daenyth

+0

का जवाब नहीं छोड़ूंगा, शायद मैं चीजों की कल्पना कर रहा हूं, लेकिन सी कोड के लिए मुझे इस तरह का प्रभाव था कि यह किसी भी तरह काम करता है (शायद स्थानीय टैग फाइलें दूसरों के सामने खोजी जाती हैं, शायद इसलिए कि यह निकटता के आधार पर टैग का चयन कर सकते हैं)? वैसे भी, मैं 'tnext' पर ध्यान देता हूं और – sehe

उत्तर

4

आप जो करना चाहते हैं वह संभव नहीं है जब तक कि वीम वास्तव में पूरे सी ++ अनुवाद इकाई को पार्स नहीं कर सकता, क्योंकि एक सी ++ कंपाइलर होगा। यह ctags के दायरे से बहुत दूर है, जो कर्सर के आसपास के क्षेत्र को केवल टोकन करने के लिए बहुत ही सरल हेरिस्टिक का उपयोग करता है।

तो इसका स्पष्ट समाधान है ... एक सी ++ पार्सर को विम में प्लग करें! वास्तव में clang_complete नामक एक प्लगइन है, जो क्लैंग सी ++ पार्सर में हुकिंग की भारी भारोत्तोलन करता है। इस आधार से, कूद-से-परिभाषा को लागू करने के लिए क्लैंग एपीआई का उपयोग करने के लिए इसे विस्तारित करना एक साधारण मामला होना चाहिए। clang_indexer है, जो स्रोत पेड़ क्रॉल करता है डिस्क पर एक सूचकांक के निर्माण के लिए, और clang_complete की मेरी कांटा, जो उपयोगों के लिए सूचकांक क्वेरी करने की सुविधा जोड़ता है:

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

यह बहुत ही शुरुआती चरण में है और मैं केवल अपने लिए यह कर रहा हूं, इसलिए इसे बहुत पॉलिश समाधान होने की उम्मीद न करें।

+0

पर नेविगेट करते समय इसे अक्सर कुंजी पर मैप करता हूं मैंने Xavier Deguillard द्वारा clang_complete.vim का उपयोग किया था। यह पूरी तरह से काम करता है लेकिन मैं जो चाहता हूं वह परिभाषा पर कूद रहा है और सभी संदर्भों को ढूंढ रहा है। यह पढ़ना अच्छा लगता है कि आप इस पर काम कर रहे हैं। कहीं कहीं है कि कैसे अपने clang_indexer और clang_complete एक साथ काम करने के लिए? यह बहुत ही आशाजनक लगता है। धन्यवाद। –

+0

http://blog.wuwon.id.au/2011/10/vim-plugin-for-navigating-c-with.html –

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