विम में फ़ाइल खोलने के लिए शॉर्टकट


123

मैं की तरह ग्रहण का उपयोग कर विम में एक फ़ाइल खोलना चाहते Ctrl+ Shift+ R, या के माध्यम से Ctrl+ Nस्वत: भरण का विकल्प। कीबोर्ड शॉर्टकट इनवॉइस करें, फ़ाइल नाम / पैटर्न टाइप करें, और सभी मेलिंग फ़ाइल नामों से चुनें।

मुझे पता है कि इसे आम तौर पर खोलना पसंद है:

:tabe <filepath>
:new <filepath>
:edit <filepath>

यहां समस्या यह है कि मुझे इन मामलों में संपूर्ण फ़ाइल पथ निर्दिष्ट करना होगा।


1
ध्यान दें कि सुझाए गए आदेशों का अलग-अलग प्रभाव :tabeहोगा, फ़ाइल को एक नए टैब में खोलेगा, :newक्षैतिज रूप से विंडो को विभाजित :editकरेगा , और नए को खोलने से पहले वर्तमान फ़ाइल को बंद कर देगा।
स्किप्पी ले ग्रैंड गौरू

जवाबों:


61

मुझे हाल ही में fuzzyfinder.vim से प्यार हुआ ... :-)

: FuzzyFinderFile आपको आंशिक नाम या पैटर्न टाइप करके फाइलें खोलने देगा।


141

आम तौर पर मैं क्या करता हूं e .(ई-स्पेस-डॉट) जो मुझे एक वर्तमान रेटिंग प्रदान करता है - फिर मैं /नाम के टुकड़ों की खोज कर सकता हूं , जैसे किसी पाठ फ़ाइल में एक शब्द खोजना। मुझे लगता है कि आम तौर पर काफी अच्छा, सरल और त्वरित है।


22
आपको अतिरिक्त 25% टाइपिंग को बचाने के लिए स्थान की आवश्यकता नहीं है। ( :e.)।
कोनराड रुडोल्फ

67
यदि आप एक पूंजी ई का उपयोग करते हैं, तो आपको डॉट की आवश्यकता नहीं है, उदाहरण के लिए: E <ENTER>
Andriy Drozdyuk

2
@ डॉर्ज़ी यह vim :-) के साथ होता है
DerMike

7
बीच :e.और :Eहालांकि व्यवहार में अंतर है : यदि वर्तमान फ़ाइल को संपादित किया गया है और अभी तक सहेजा नहीं गया है, तो पूर्व शिकायत करेगा (जैसे :edit) "अंतिम परिवर्तन के बाद से नहीं लिख", क्योंकि उत्तरार्द्ध क्षैतिज रूप से विंडो को विभाजित करेगा (जैसे) :new) एक नई फ़ाइल खोलने की अनुमति देने के लिए (जबकि दोनों वर्तमान फ़ाइल को नई फ़ाइल से बदल देगा यदि इसे संशोधित नहीं किया गया है (जैसे :edit))।
स्किप्पी ले ग्रैंड गौरू

1
यदि आप कोई फ़ाइल खोलते हैं, तो उसे दूसरी फ़ाइल से बदल दें, आप पहले "e #" का उपयोग करके वापस आ सकते हैं
dkretz

33

:find एक और विकल्प है।

मैं अपने प्रोजेक्ट के रूट से विम खोलता हूं और pathवहां सेट करता हूं ।

फिर, मैं पेड़ में कहीं भी स्थित फ़ाइलों का उपयोग करके खोल सकता हूं:

:find **/filena< tab >

टैब विभिन्न मैचों के माध्यम से स्वत: पूर्ण होगा। ( **इसे पथ के माध्यम से पुन: खोज करने के लिए कहता है)।


:findकार्य निर्देशिका के सापेक्ष पथ प्राप्त करने के लिए मैं उपयोगी नहीं हूं । यहाँ देखें प्रश्न और @romainl उत्तर: stackoverflow.com/questions/28224168/… । मुझे वर्किंग डायरेक्टरी के सापेक्ष रास्ता आसान करने के लिए अधिक दिलचस्प @strager उत्तर मिलता है।
ziiweb

25

आप वर्तमान पथ में फ़ाइल का उपयोग करके खोज सकते हैं **:

:tabe **/header.h

एक से अधिक मैच होने पर विभिन्न पूर्णताओं को देखने के लिए टैब को हिट करें।


मैंने इसका उपयोग करने की कोशिश की लेकिन यह इतना धीमा है। मेरा मतलब है कि मेरा आवेदन बड़ा है और संपादक ने कुछ समय के लिए काम करना बंद कर दिया। क्या आप जानते हैं कि संपादक का प्रदर्शन और गति बढ़ाने के लिए कोई सेटिंग है।
टेकमाडी

1
अच्छा उत्तर। :tabe **/*der.hअगर आपको फ़ाइल का पूरा नाम याद नहीं है तो कुछ का उपयोग करें ।
ziiweb

16

CtrlP प्लग-इन का उपयोग करने पर विचार करें ।

यह जानूस वितरण में शामिल है ।

आपको वर्तमान निर्देशिका में फ़ाइलें ढूंढने की अनुमति देता है, बफ़र्स खोलें या "फजी मिलान" या नियमित अभिव्यक्ति का उपयोग करके हाल ही में उपयोग की जाने वाली फाइलें।


1
वास्तव में मैं इसे जानूस वितरण के एक हिस्से के रूप में उपयोग करता हूं।
एलेक्सी

मूल CtrlP रेपो निष्क्रिय है, लेकिन एक सक्रिय कांटा है
jpyams

12

जब तक मैं कुछ याद नहीं कर रहा हूँ: ई फाइलनाम सबसे तेज़ तरीका है जो मैंने पाया है।

आप फ़ाइल नाम को स्वतः पूर्ण करने के लिए टैब का उपयोग कर सकते हैं।


@dirkgently, यह है। यह अभी भी एक शॉर्टकट है, जैसा कि इस प्रश्न का शीर्षक बताता है, लेकिन मुझे नहीं लगता कि यह प्रश्नकर्ता की तलाश है।
strager

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


9

मैं अपने .vimrc फ़ाइल (नीचे सटीक सिंटैक्स) में कुछ शॉर्टकट का उपयोग करता हूं।

वे इस तथ्य पर आधारित हैं कि 90% मामलों में, मैं उसी निर्देशिका में एक अन्य फ़ाइल खोलना चाहता हूं जिस फ़ाइल को मैं वर्तमान में संपादित कर रहा हूं, या उस निर्देशिका में उस संपादित फ़ाइल के पदानुक्रम में बहुत करीब है।

यहाँ क्या आदेश है:

,cd : वर्तमान कार्यशील निर्देशिका को उस निर्देशिका में बदलें जो आपके द्वारा संपादित की जा रही वर्तमान फ़ाइल में है।

,e: पहले से भरे हुए मौजूदा वर्किंग डायरेक्टरी वाली फाइल को खोलता है ताकि आपको केवल फ़ाइल नाम निर्दिष्ट करना पड़े ।

इन्हें अपने .vimrc में डालें:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

यहाँ घटनाओं का एक क्रम है:


  1. आप "/ home / prog" में test.java नामक फाइल को संपादित कर रहे हैं
  2. ,cd -> वर्तमान कार्यशील निर्देशिका अब "/ घर / ठेला" बन गई है
  3. ,e -> ": e / home / prog" का विस्तार करता है ताकि आप केवल फ़ाइल नाम भर सकें, परीक्षण कह सकते हैं।

  1. ,e - "का विस्तार": ई / घर "
  2. tab -> / घर के उपनिर्देशिकाओं के माध्यम से साइकिल
  3. enter-> cdनिर्देशिका के लिए आप कहना चाहते हैं / घर / ठेला
  4. ,e -> का विस्तार ": ई / घर / ठेला"

8

वहाँ भी कमांड-टी है जो मुझे बंच का सबसे अच्छा लगता है (और मैंने उन सभी की कोशिश की है)। यह इसे स्थापित करने के लिए एक छोटी सी परेशानी है, लेकिन एक बार स्थापित होने के बाद, यह उपयोग करने का एक सपना है।

https://wincent.com/products/command-t/


1
आप चाहें तो ctrlp.vim ( github.com/kien/ctrlp.vim ) भी आज़मा सकते हैं । यह मूल रूप से कमांड-टी के समान है लेकिन शुद्ध विम्स्क्रिप्ट में लिखा गया है। (IMHO के रूप में अच्छी तरह से उपयोग करने के लिए आसान है)
datentyp

6

टैब का उपयोग करें, वे काम करते हैं जब फ़ाइल पथ को विम एस्केप मोड में इनपुट करना होता है!


4

यदि आपको टैग मिले हैं (और आपको चाहिए), तो आप कमांड लाइन से केवल क्लास या मेथड या c फंक्शन के नाम से एक फाइल खोल सकते हैं, "vim -t DBPlaylist" के साथ, और vim के साथ ": टैग ShowList "।


4

यदि आप एक सामान्य निर्देशिका में फ़ाइलों को संपादित कर रहे हैं, तो आप :cdउस निर्देशिका में कर सकते हैं , फिर :eसिर्फ फ़ाइल नाम पर उपयोग करें ।

उदाहरण के लिए, इसके बजाय:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

तुम कर सकते हो:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

या, यदि आपके पास पहले से वांछित निर्देशिका में एक फ़ाइल खुली है, तो आप %वर्तमान फ़ाइल नाम के लिए शॉर्टहैंड का उपयोग कर सकते हैं , और इसे वर्तमान निर्देशिका में :hसंशोधक ( :help :_%:) के साथ ट्रिम कर सकते हैं :

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

और, जैसा कि अन्य लोगों ने कहा है, आप एक्स-लाइन पर फ़ाइल नामों को पूरा कर सकते हैं ( :help cmdline-completionअधिक के लिए देखें )।


4

यह वही नहीं है जो आप खोज रहे हैं, लेकिन यह कई मामलों में अच्छा है (हालांकि सभी नहीं)।

यदि आप VIM खोलते हैं और बफर में एक फ़ाइल का नाम है, तो आप उस फ़ाइल नाम पर कर्सर रख सकते हैं और टाइप कर सकते हैं gf। यह फ़ाइल को खोलता है जिसका नाम उसी बफ़र में कर्सर के नीचे है। यह वैसा ही है

:e CTRL+r CTRL+w


1
मैंने gf दबाया और अब मैंने नई फाइल खोली है जो कि कर्सर के नीचे है। अब मूल फाइल पर वापस कैसे आये। !!
vrbilgi

@ user430294: यह एक अलग बफर में खुला है। उपयोग:b oldname
नाथन फ़ेलमैन

@vrbilgi, पहले से संपादित फ़ाइल पर वापस जाने के लिए Ctrl + o का उपयोग करें। जिस फाइल से आप वापस आ रहे हैं, उस पर फिर से जाने के लिए Ctrl + i का उपयोग करें।
ब्रूओग

3

मैं तीन प्लगइन्स को जानता हूं जो फाइलों को खोलने की अनुमति देते हैं, ऑटो-पूर्ति का समर्थन करते हैं, और खोलने के लिए फ़ाइल के पूर्ण पथ नाम को दर्ज करने की आवश्यकता नहीं होती है (जब तक कि फाइलें &pathvim विकल्प में से किसी एक निर्देशिका के अंतर्गत हों ) :

  • searchInRuntime कि मैं बनाए रखने कर रहा हूँ (पूरा होने है नहीं पर :e/ :findहै, लेकिन विभाजन कार्यों पर)
  • फजी खोजक के रूप में यह पहले से ही बताया गया है,
  • लुकआउट

हाल ही में, मैंने इसी तरह की सुविधा के साथ एक और प्लगइन देखा है, लेकिन मुझे नाम याद नहीं है।

जल्द ही,: ऑटो-कम्प्लीट सपोर्ट मिलने की संभावना है - इस विषय पर पैच इन दिनों vim_dev मेलिंग-लिस्ट पर प्रसारित हो रहे हैं।


1
  • आप उपयोग कर सकते हैं (वन्यजीव सेट करें)
  • आप स्वत: पूर्ण फ़ाइल नाम के लिए टैब का उपयोग कर सकते हैं
  • आप मिलान का उपयोग भी कर सकते हैं, उदाहरण के लिए: ई p*.datया ऐसा कुछ (जैसे पुराने 'डॉस में)
  • आप यह भी कर सकते हैं: ब्राउज़ पुष्टि ई (एक ग्राफिकल विंडो के लिए)

  • लेकिन आपको संभवतः यह भी निर्दिष्ट करना चाहिए कि आप किस विम संस्करण का उपयोग कर रहे हैं, और यह कि emacs में वह चीज कैसे काम करती है। हो सकता है कि हम आपको एक सटीक विकल्प चुन सकें।


1

FuzzyFinder का उल्लेख किया गया है, हालांकि मुझे FuzzyFinderTextmate प्लगइन के व्यवहार की तरह टेक्स्टमेट पसंद है जो सभी उप-विभाजकों को शामिल करने के लिए व्यवहार का विस्तार करता है।

सुनिश्चित करें कि आप fuzzyfinder.vim के संस्करण 2.16 का उपयोग कर रहे हैं - उच्च संस्करण प्लगइन को तोड़ते हैं।


1

विपुल ctags के साथ, आप फ़ाइल जानकारी के साथ टैग फ़ाइलें बना सकते हैं:

ctags --extra=+f -R *

उसके बाद, VIM से फ़ाइल खोलें

:tag filename

आप <tab>स्वत: पूर्ण फ़ाइल नाम का भी उपयोग कर सकते हैं ।


1

जीवीआईएम में, फ़ाइल को ओपन / रीड / राइट डायलॉग का उपयोग करके ब्राउज किया जा सकता है;

:browse {command}

{कमांड} - खुला / पढ़ना / लिखना

open - फाइल को रीड करता है - फाइल को लिखता है - SaveAs डायलॉग


0

मैंने FuzzyFinder स्थापित किया। हालाँकि, सीमा यह है कि यह केवल वर्तमान dir में फ़ाइलें ढूँढता है। FuzzyFinderTextmate को जोड़ने के लिए एक वर्कअराउंड है। हालाँकि, डॉक्स और कमेंट्री के आधार पर, यह मज़बूती से काम नहीं करता है। आपको FuzzyFinder के सही संस्करण की आवश्यकता है और आपको रूबी के समर्थन के साथ Vim की अपनी प्रति संकलित करने की आवश्यकता है।

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

:args app/**
:args config/**
:args test/**
etc...

(इसका मतलब है कि मेरे पास संभवतः फाइलों के स्कोर खुले होंगे, हालांकि अभी तक यह अभी भी ठीक काम करता है।)

उसके बाद, मैं बफर मोड में FuzzyFinder का उपयोग कर सकता हूं और यह कुछ हद तक TextMate के command-oशॉर्टकट की तरह काम करेगा ...

:FuzzyFinderBuffer

पक्की बात? मेरे पास मेरे .vimrc में कुछ कॉन्फिगर हैं, "g: fuf_abbrevMap" देखें। मुझे प्रलेखन में एक उदाहरण मिला होगा। जब मैं शॉर्टकट टाइप करता हूं, तब मैं "वेब:" की तरह एक एब्सब्रेव टाइप करता हूं और यह मेरी पसंद के फोल्डर के भीतर सभी फाइलों को खोजेगा। मेरी समस्या वास्तव में यह है कि किसी कारण से यह अब फाइलें नहीं खोलती है, मैं इसके बजाय स्टेटस बार में [NEW DIRECTORY] देखता हूं। लेकिन मैं के साथ एक ही समस्या है: ओ, fuf के लिए असंबंधित लगता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.