VIM में बड़े प्रोजेक्ट में कैसे नेविगेट करें


86

केवल VIM का उपयोग करके आप बड़ी परियोजनाओं (सैकड़ों फाइलें) का प्रबंधन कैसे करते हैं?

मैं व्यक्तिगत रूप से छोटी परियोजना की तुलना में किसी भी बड़े में समस्याएं शुरू कर रहा हूं।

  • वहाँ जल्दी से 'फ़ाइल पर जाएँ' के लिए कोई रास्ता है, अधिमानतः नाम पूर्णता के साथ?
  • 'क्लास की परिभाषा पर जाएं' के लिए भी यही है, जब यह दूसरी फाइल में हो

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


आप किस भाषा का उपयोग कर रहे हैं?
LB40

मैं भाषा अज्ञेय समाधान पसंद करूंगा, लेकिन मुझे C ++, PHP और रेल के लिए समर्थन की आवश्यकता है।
जैकब अर्नोल्ड

आपने कौन सा उत्तर स्वीकार किया? @ जाकूब्रनॉल्ड

@xetrasu I का उपयोग समाप्त हुआNERDTree
जैकब अर्नोल्ड

जवाबों:


33

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

प्रयत्न

:help tags

C / C ++ के लिए एक टैग फ़ाइल बनाने के लिए, अपने शेल प्रॉम्प्ट पर जाएं (मैं मान रहा हूं कि आपका सिस्टम * निक्स / साइगेल है) और टाइप करें

info ctags

या

ctags --help

2
Vim में cscope के लिए सपोर्ट भी है, जो आपको ऐसा काम करने देगा जैसे किसी फ़ंक्शन को दिए गए फ़ंक्शन को कॉल करता है - :help cscopeजानकारी के लिए देखें। परिचय में एक अच्छी सुविधा सूची है ("जैसे सवालों के जवाब देने के लिए डिज़ाइन किया गया है")।
कैस्केबेल

1
दुर्भाग्य से, cscope को C ++ की बहुत सीमित समझ है।
ल्यूक हरमिट्टे

28

मुझे सरल समाधान पसंद हैं, इस समय नेविगेट करने का मेरा पसंदीदा तरीका है:

में जोड़े ~/.vimrc.local

set path=$PWD/**

फिर वर्तमान कार्य निर्देशिका (pwd) में कहीं भी फ़ाइल खोजने के लिए संपादक में इसे टाइप करें

:find user_spec.rb

आप कई नामों को खोजने के लिए फ़ाइल नाम पर टैब-पूर्णता का उपयोग कर सकते हैं, जिससे यह TextMate बहुत खुश है।


1
यह समाधान इससे बहुत सरल है: एफसी और प्लगइन्स की कॉस नो कैशिंग आवश्यक है और ... आपने मेरा दिन एवोकैड कर दिया है! धन्यवाद!
श्रीकुमार

1
विम डिफ़ॉल्ट निर्देशिका के रूप में wd नहीं पढ़ रहा है। मैंने शेल को फिर से शुरू किया है और यह अभी भी काम नहीं करता है। vim .कमांड निष्पादित करने से पहले भी प्रयास किया गया: /
एडम ग्रांट

13

मैं NERDTree (डायरेक्टरी साइडबार), FuzzyFinder Textmate (TextMate के CMD + T जैसे गो-टू-फाइल) और सत्र (: h सत्र) का उपयोग करके मुझे बड़ी परियोजनाओं से निपटने में मदद करता हूं।

मैं कुछ सत्र सहायक प्लग इन का उपयोग करने का सुझाव दूंगा। मैं उल्लेख करता हूं कि मैं क्या उपयोग करता हूं, लेकिन मैं अभी तक इससे संतुष्ट नहीं हूं। बस Google "विम सत्र"।

काम करने के लिए FuzzyFinder Textmate के साथ ध्यान देने वाली एक बात यह है कि यह एक पुराने संस्करण पर निर्भर करता है FuzzyFinder प्लगइन, विशेष रूप से v2.16। कुछ भी उच्चतर और आपको त्रुटियां मिलेंगी। लेकिन यह निश्चित रूप से परेशानी के लायक है। हालांकि इसका नाम पूरा होने की स्थिति नहीं है, इसकी खोज स्मार्ट है, इसलिए अगर मैं fro/time/actionsphpइसे खोजता हूं तो यह फ़ाइल को खींच लेगा apps/(fro)ntend/modules/(time)_tracking/actions/(actions).class.(php)(कोष्ठक यह दर्शाता है कि यह क्या मेल खाता है)। यह उन फ़ाइलों को चुनना बहुत आसान बनाता है जो केवल उनके फ़ोल्डर नाम से अद्वितीय हैं।


2
मुझे एक नया प्लगइन मिला है जो मुझे बेहतर लगता है और सेटअप करना आसान है (कम से कम मेरे मामले में): कमांडेट । काफी तेज।
डोनट

6
एक नया, अधिक शक्तिशाली उपकरण, vim स्क्रिप्ट में लेखनी , इसलिए कोई बाहरी निर्भरता ctrlp नहीं है जिसका उपयोग जानूस परियोजना
alexandru.topliceanu

7

साथ ही अमूल्य ctags और विभिन्न संबंधित कमांड। मैं भी परियोजना प्लगइन के बिना नहीं रह सकता है , जो आपको एक अलग फलक में एक परियोजना से जुड़ी ब्याज की फाइलें रखने की अनुमति देता है। मुझे याद नहीं है कि मेरा सेटअप कितना अनुकूलित है, लेकिन अगर मैं एक स्रोत फ़ाइल खोलना चाहता हूं, जिसका नाम Debug.c है, तो मैं हिट हूं:

<F12>     " Opens the project pane
/De       " Searches for "De", which is likely to be enough to find Debug.c or possibly Debug.h
<ENTER>   " Opens the selected file and closes the project pane

मैं अक्सर करता हूं:

:vsp      " Vertically split the window
<F12>     " Reopen project pane
#         " Search back to find previous entry with the same name (to find
            Debug.h if I was on Debug.c: my headers are in Headers/ and
            my source is in Source/, so the headers come earlier in the list
            than the source).  I use * to go the other way, obviously.
<ENTER>   " Open the header file in the other window and close the project window.

इस अपेक्षाकृत छोटे अनुक्रम के साथ, मैं किसी भी फ़ाइल को खोल सकता हूं और यह एक ऊर्ध्वाधर विभाजन में हेडर है। चूंकि प्रोजेक्ट प्लगइन विंडो सिर्फ एक पाठ फ़ाइल है, इसलिए विम की खोज क्षमता का उपयोग करके पूर्णता प्राप्त की जाती है।


4

Vim 7.3 में शुरू, :findकमांड में फ़ाइल नाम का टैब-पूरा होता है।

इसलिए यदि आप अपने सेट 'path'अपने पूरे परियोजना को रोकने के लिए विकल्प (शायद का उपयोग कर **वाइल्डकार्ड रिकर्सिवली खोज उपनिर्देशिका अनुमति देने के लिए), तो आप उपयोग कर सकते हैं :find, :sfind, :tabfindअपनी परियोजना में किसी भी फाइल को पाने के लिए पूरा होने के साथ, आदि आदेशों। यह सीधे फाइल gfऔर दोस्तों के साथ कूदने की अनुमति देता है यदि फ़ाइल का नाम आपके पाठ में है, उदाहरण के लिए एक निर्देश शामिल करें।

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


3

यदि आप ctags का उपयोग कर रहे हैं जैसा कि अन्य पोस्टरों ने सिफारिश की है, तो सुनिश्चित करें कि आप टैगलिस्ट प्लगइन को देखें।

सुनिश्चित करें कि आप डॉक्स पढ़ने और प्रमुख बाइंडिंग सीखने के लिए समय लेते हैं। यहां आपको आरंभ करने के लिए कुछ हैं (TList विंडो से):

  • ओ - नई विंडो में खुली फाइल
  • t - नई टैब में खुली फाइल
  • [[या बैकस्पेस - सूची में पिछली फ़ाइल
  • ]] या टैब - सूची में अगली फ़ाइल

3

विपुल ctags।

कर्सर के नीचे टैग पर जाने के लिए Ctrl-] का उपयोग करें।


2

मैं FindFile का उपयोग करता हूं । यदि आप अपने प्रोजेक्ट के रूट पर vim खोलते हैं और :FC .प्लगइन चलाते हैं तो आपके cwd के नीचे सभी फ़ाइलनाम कैश कर देंगे। फिर आप :FFएक पूरा मेनू खोलने के लिए और अपनी इच्छित फ़ाइल का नाम टाइप कर सकते हैं (या पहले कुछ अक्षर)।


वाह यह उपयोग करने के लिए सबसे आसान प्लगइन की तरह है। शून्य सेटअप शामिल है .. बस FC .अपने रूट डायर में, फिर :FFदर्ज करें, वह फ़ाइल नाम लिखना शुरू करें जिसे आप चाहते हैं और आप कर रहे हैं। मैं यह पता लगाने की कोशिश कर रहा हूं कि अभी भी नए टैब्स में कैसे लॉन्च किया जाए ..
परीक्षक

यह भी ध्यान देने योग्य है कि यदि आप इसका उपयोग करते हैं, तो हर बार जब आप विम लॉन्च करते हैं, तो आपको :FC .उस निर्देशिका में फ़ाइलों को कैश करना होगा ।
परीक्षक

यहाँ FindFile.vim का अपडेटेड वर्जन है :FTया :FindTabNew gist.github.com/1104884 के
परीक्षक

2

vimअपनी स्रोत फ़ाइल की जड़ से खोलना और pathउसमें सभी उप-निर्देशिकाओं को शामिल करने का विकल्प प्रदान करना।
उदाहरण के set path+=/usr/include/c++/**लिए C ++ हेडर और set path+=**आपके स्रोत निर्देशिका के लिए।

इसके बाद, निम्नलिखित संभावनाओं का ढेर खुल जाता है।

1) नाम या इसके कुछ हिस्सों द्वारा फ़ाइल खोलना

:find file_name

आप स्वत: पूर्णता और वाइल्डकार्ड विस्तार का :findमज़बूती से उपयोग कर सकते हैं । आप नाम टाइप करें, यह नाम का पता लगाएगा। यह भाषा अज्ञेय की रचना है। मुझे यकीन है कि आप इसे पसंद करेंगे।

2) क्यूसर के तहत फाइलों में नेविगेट करना:
यदि आप किसी फ़ाइल पथ पर जाना चाहते हैं #include "project/path/classA.h

gf or gF  - go to file under cursor.   

Ctrl- 6- के बाद gfया पिछले कर्सर स्थिति में वापस आने के लिएgF

3) एपीआई खोज और एपीआई स्थान पर नेविगेट करना

[iया [Iअपने कार्यक्षेत्र को छोड़ने के बिना कर्सर के तहत शब्द के लिए अपने फ़ंक्शन हस्ताक्षर को देखने के लिए उपयोग किया जा सकता है। [<Tab>वास्तव में घोषणा के लिए जाना। उपयोग Ctrl- 6पिछले स्थान पर वापस आने के लिए।


विस्तार के बिना path, आप :Exकमांड द्वारा फ़ाइलों को नेविगेट करना शुरू कर सकते हैं और नेविगेट कर सकते हैं और अपनी फ़ाइल खोल सकते हैं। मैं NerdTreeहालांकि इस पर पसंद करते हैं ।


1

हालाँकि, मैं उम्मीद कर रहा हूँ कि कोई बेहतर समाधान बताएगा ताकि मैं कुछ सीख सकूँ, NERDTree मेरे लिए अच्छा रहा है जब तक कि मेरे पास पेड़ का विस्तार है नाम के साथ विशिष्ट फ़ाइलों को पूरा करने के लिए। जब मुझे फ़ाइल में आने की आवश्यकता होती है, तो कमांड कुछ इस तरह है:

, d / foo.py (जहां foo.py एक फ़ाइल नाम है)

, वृक्ष को खोलने के लिए, / खोज मोड में प्रवेश करने के लिए, नाम (या आंशिक नाम, या regex, या जो कुछ भी) फ़ाइल का, और फिर ओ को खोलने के लिए।

यदि आपको फ़ाइल नाम पर्याप्त नहीं है या डुप्लिकेट हैं, तो निश्चित रूप से आपको कुछ बार 'n' मारना पड़ सकता है।

मैं मानता हूँ कि यह इस तरह NERDTree का उपयोग कर एक हैक के एक बिट की तरह लगता है, हालांकि यह अब तक मेरी मांसपेशी स्मृति में मिल गया है कि मैं इसके बारे में भी नहीं सोचता।

बेशक मैं ctags का उपयोग करता हूं, लेकिन वे केवल तब उपयोगी होते हैं जब आपके पास कर्सर के पास एक फ़ंक्शन होता है और किसी अन्य फ़ाइल या कुछ में इसकी परिभाषा प्राप्त करने की आवश्यकता होती है। बहुत बार मैं कहता हूं "ठीक है, मुझे अब फीचर x पर काम करने की आवश्यकता है" और पास के किसी भी संदर्भ के बिना किसी अन्य फ़ाइल पर नेविगेट करने की आवश्यकता है जो ctags वास्तव में मदद करेगा।


3
मैंने इसे कुछ और देखा, फजीयफर प्रोजेक्ट खोज के लिए एक महान विचार की तरह लग रहा है।
गुरुत्वाकर्षण

1

मैं दो प्लग इन का उपयोग कर रहा हूँ:

  • searchInRuntime जो कमांड लाइन पर फ़ाइल नाम पूरा करता है। यह किसी तरह से फजीफाइंडर और लुकफाइल के समान है,
  • lh- टैग जो पूरी तरह से प्रायोगिक और अनिर्दिष्ट है। यह दो सुविधाएँ प्रदान करता है: फाइल सेव (आईएनजी) पर टैगफाइल का स्वचालित और त्वरित अद्यतन, और <c-w><m-down>डिफ़ॉल्ट रूप से प्लग किया गया टैग चयनकर्ता । आप इसके बजाय प्रसिद्ध टैगलिस्ट प्लगइन की जांच करना चाह सकते हैं।

दोनों को मेरी विम्ल लाइब्रेरी lh-vim-lib की आवश्यकता है।


0

SourceCodeObedinece आज़माएं । यह एक मैंने C ++ 1Gb स्रोत फ़ाइलों की परियोजना को संभालने के लिए विकसित किया।
मैं इसे 0scan के साथ जोड़ी में उपयोग करता हूं

ये दो प्लगइन्स सबसे लोकप्रिय विम ब्राउज़िंग टूल के आसपास रैपर हैं: ctags और cscope

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