फ़ंक्शन कॉल करने के लिए कैसे कूदें?


14

एक टैग फ़ाइल बनाने के बाद, exuberant-ctagsमैं एक फ़ंक्शन कॉल से इसकी घोषणा तक कूद सकता हूं <C-]>जिसके साथ यह बहुत सुविधाजनक है।

मेरा सवाल यह है कि इसे दूसरे तरीके से कैसे किया जाए? जब मेरा कर्सर किसी फ़ंक्शन की परिभाषा पर है, तो मैं उन लाइनों पर कैसे जा सकता हूं जहां फ़ंक्शन कहा जाता है?

जब मैं ctags द्वारा बनाई गई फ़ाइल को देखता हूं तो मुझे केवल परिभाषा के स्थान से संबंधित सूचना मिलती है और कॉल की नहीं, क्या इसका मतलब यह है कि मैं ऐसा नहीं कर सकता, उस विम को एक चतुर समाधान के रूप में या मुझे कुछ उपयोग करने की आवश्यकता है के अलावा exuberant-ctags?


Ack या Ag भी काम करेगा और आप आसानी से इन कमांड लाइन टूल्स के लिए प्लगइन रैपर पा सकते हैं। जैसे github.com/mileszs/ack.vim और github.com/rking/ag.vim
डैश-टॉम-बैंग

जवाबों:


11

आप कॉल के साथ फ़ंक्शन करने के लिए कूद नहीं सकते ctags। C / C ++ और Java के लिए cscope, और यह अच्छी तरह से विम (देखें :help cscope) के साथ एकीकृत है । अन्य भाषाओं के लिए आप एक ऐसा उपकरण ढूंढने में सक्षम हो सकते हैं, जो / निर्यात cscopeअसंगत डेटाबेस ( hscopeहास्केल के लिए फाई , और starscopeरूबी, गो और जावास्क्रिप्ट के लिए) उत्पन्न करता है । तुम भी उपयोग कर सकते हैं cscopeके साथ जीएनयू वैश्विक , डेटाबेस इंगित करके cscopeprgकरने के लिए gtags-cscope

एक तरफ ध्यान दें: यदि आप कभी-कभार Engrish ;) का उपयोग नहीं करते हैं , तो आप शायद इसके बजाय सार्वभौमिक-ctags का उपयोग करना चाहते हैं exuberant-ctags। बाद के वर्षों में अद्यतन नहीं किया गया है। पूर्व एक सक्रिय रूप से बनाए रखा कांटा है।


क्या Cscope C / C ++ और Java के अलावा अन्य भाषाओं का समर्थन करता है?
edi9999

@ edi9999 cscopeस्वयं C / C ++, Lex और Yacc का समर्थन करता है। जावा के लिए समर्थन मामूली उपयोगी है। आप उपयोगिता के globalमाध्यम से GNU से (पुरानी शैली) PHP और जावास्क्रिप्ट के लिए समर्थन प्राप्त कर सकते हैं gtags-cscope। और, जैसा कि मैंने ऊपर कहा था, अन्य सूचकांक हैं जो- cscopeअसंगत डेटाबेस को निर्यात कर सकते हैं ।
सातो कासुरा

8

आप ctags के साथ ऐसा नहीं कर सकते।

Cscope की तरह एक बीफ़ियर विकल्प का प्रयास करें (जिसका अपना स्वयं का सहायता अनुभाग भी है :):help cscope या वैश्विक


क्या Cscope C / C ++ और Java के अलावा अन्य भाषाओं का समर्थन करता है?
edi9999

हां, कम से कम PHP और जावास्क्रिप्ट।
रोमेनिल

1
@romainl नोप, cscopeखुद न तो PHP, और न ही जावास्क्रिप्ट का समर्थन करता है। आप हालांकि GNU के साथ PHP और जावास्क्रिप्ट फ़ाइलों को अनुक्रमित कर सकते हैं global, फिर gtags-cscopeपरिणामी gtagsफ़ाइल का उपयोग करने के लिए चला सकते हैं cscope
सातो कासुरा

@SatoKatsura, हाँ, cscope जावास्क्रिप्ट (और CSS, स्पष्ट रूप से) का समर्थन करता है
रोमेनिल

2
@romainl आप को देख पर विचार करना चाहिए cscopeकी सूत्रों के बजाय त्वरित प्रयोगों के आधार पर अटकलें। cscopeबल्कि आराम से सी पार्सर है। यही सब कुछ है, और यह सब करता है। उस पार्सर के साथ "समर्थन" के उपयुक्त मूल्यों के लिए यह "बहुत सारी भाषाओं" का समर्थन करता है। निर्माणों को तब तक पहचाना जाता है जब तक वे सी की तरह कम या ज्यादा दिखते हैं। यही कारण है कि जावा कक्षाएं और नए PHP निर्माणों को मान्यता नहीं दी जाती है। फाई की तुलना स्टारस्कोप से करें , जो वास्तव में नई भाषाओं को जोड़ने की अनुमति देता है।
Sato Katsura

8

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

:grep! "\<<cword>\>" . -r
:copen

आइए डालते हैं कि कीबाइंड में:

nnoremap <F4> :grep! "\<<cword>\>" . -r<CR>:copen<CR>

जब मैं एक बड़े अपरिचित कोडबेस की खोज कर रहा हूं तो मुझे यह एक महत्वपूर्ण प्रोजेक्ट-व्यापी खोज अमूल्य लगती है।

\<और \>regexp क्रम हैं जो एक शब्द की शुरुआत और अंत का संकेत देते हैं, इसलिए आपको आंशिक मैच नहीं मिलेंगे। ( -wGrep का विकल्प इसे प्राप्त करने का एक और तरीका हो सकता है।)

हालाँकि, यह एक अनजाने में खोज है , इसलिए यदि यह शब्द असंबंधित संदर्भों में दिखाई देता है तो यह झूठी सकारात्मकता उत्पन्न कर सकता है।


सच में, मैं grep.vim प्लगइन के बजाय अपने स्वयं के संशोधित संस्करण का उपयोग करता हूं । यह उपयोग करने के लिए थोड़ा मित्रवत है:

  • यह आपको खोज पैटर्न, और grep कमांडलाइन को संपादित करने देता है (ताकि आप src/ lib/इसके बजाय विशिष्ट फ़ोल्डरों को लक्षित कर सकें .) और परिवर्तनों को याद रखें।
  • मैंने Google के csearch के लिए समर्थन जोड़ा । यह grep की तुलना में बहुत तेज़ हो सकता है क्योंकि यह हर बार प्रत्येक फ़ाइल को स्कैन करने के बजाय शब्दों का एक सूचकांक बनाता है। विशेष रूप से, csearch थोड़ा अलग रेक्सएक्सपी मानक का उपयोग करता है, इसलिए और के \bबजाय इसका उपयोग किया जाना चाहिए ।\<\>

मैं इसे कॉन्फ़िगर करता हूं और इस तरह की कुछ मानक फाइलों को बाहर करता हूं ।

तेजी से पहुंच के लिए, मैं दो कीबाइंड बनाता हूंF3मुझे कमांडलाइन संपादित करने देता है, F4बिना किसी अतिरिक्त कीस्ट्रोक्स के पहले से कॉन्फ़िगर कमांडलाइन का उपयोग करता है। तंत्र बहुत बदसूरत है, और कुछ सफाई का उपयोग कर सकता है, लेकिन इसने मुझे अच्छी तरह से सेवा दी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.