विम फ़ाइल नेविगेशन


90

मैं पिछले कुछ वर्षों से TextMate का उपयोग करने के बाद वास्तव में जानने की कोशिश कर रहा हूँ।

मैंने मेमोरी में कुछ इन-फ़ाइल नेविगेशन करना शुरू कर दिया है, लेकिन मैं कई फाइलों के बीच नेविगेट करने में संघर्ष कर रहा हूं।

मेरे वर्कफ़्लो में यह बहुत सामान्य है कि मैं मुट्ठी भर फ़ाइलों के बीच नियमित रूप से फ़्लिप कर रहा हूँ (पर्याप्त फ़ाइलें जैसे कि स्प्लिट-पैन विंडो बहुत छोटी हो जाती हैं)।

मैं वर्तमान में NERDTree उपयोग कर रहा हूँ, लेकिन निर्देशिका में गहरे उतर बोझिल के साथ-साथ लगातार का उपयोग कर पाते हैं CTRL+ W h/ CTRL+ W lआगे पीछे हॉप करने के लिए।

मुझे लगता है कि मैं उन टैब के साथ बेहतर करूँगा जिनके बीच मैं आसानी से टॉगल कर सकता हूं लेकिन शायद मुझे एक अलग वर्कफ़्लो का उपयोग करने की आवश्यकता है।

मैं था की तरह "फाइल पर जाएं ..." भी तरह एक शॉर्टकट CMD+ TTextMate में। मैंने पाया है, fuzzy_file_finderलेकिन इसे रूबी बाइंडिंग के साथ बनाया जाना चाहिए जो कि मेरे द्वारा काम किए गए मूल संस्थापनों के मामले में नहीं है।

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

किसी भी विचारों को भारी कर रहे हैं विकल्प बहुत सराहना कर रहे हैं!


1
मुझे फ़ाइलों और बफ़र्स को नेविगेट करने का वास्तव में संतोषजनक तरीका नहीं मिला है, जो किसी भी बाहरी एड्स का उपयोग नहीं करता है। निर्मित सामान बहुत बुरा है (मेरा मतलब है, इसकी संख्या से एक बफर में बदलना? जो अस्थायी बफर संख्या को याद करने के लिए चारों ओर जाता है ...)
Svend 20'09

1
@vvend: आप बफ़र्स को नाम के साथ-साथ संख्या का भी उल्लेख कर सकते हैं - नीचे मेरा जवाब देखें
डेव किर्बी

जवाबों:


92

मुझे लगता :eहै कि सादे पुराने के माध्यम से उपनिर्देशिकाओं में ड्रिलिंग को कम नहीं किया जा सकता है क्योंकि बोझिल को टैब-पूरा करने के लिए एक सभ्य कॉन्फ़िगरेशन दिया गया है।

'wildmenu'कमांड के ऊपर वाले मॉडल में विम को पूर्णता (फ़ाइलनाम) की सूची दिखाने के विकल्प में देखें । आप 'wildmode'टैब को पूरा करने के प्रकार को और कॉन्फ़िगर करने के लिए विकल्प बदल सकते हैं जो विम करेगा।

व्यक्तिगत रूप से मैं उपयोग करता हूं :set wildmode=full

मेरा वर्कफ़्लो इस तरह है:

  1. :cd मेरी परियोजना की सबसे बड़ी निर्देशिका में।
  2. फ़ाइल खोलने के लिए foo/bar/baz:

    • सरलतम परिदृश्य: प्रकार :e f<tab>b<tab>b<tab><enter>

    • अगर वहाँ के साथ शुरू एक फ़ाइल से अधिक कर रहे हैं bउन निर्देशिकाओं में से एक में आप एक ऐसा करने के लिए हो सकता है <left>या <right>या किसी अन्य <tab>कुंजीपटल उन दोनों के बीच कूद करने के लिए (या स्पष्ट करने के लिए कुछ और अक्षर टाइप) पर।

    • सबसे खराब स्थिति में फाइलें और निर्देशिकाएं होती हैं जो एक नाम साझा करती हैं और आपको निर्देशिका में नीचे ड्रिल करने की आवश्यकता होती है। इस स्थिति में डायरेक्टरी नाम को पूरा करें और फिर *<tab>नीचे ड्रिल करें।

  3. आवश्यकतानुसार 2 या 3 खिड़कियां खोलें और उन सभी में फाइलें खोलें।
  4. एक बार एक फाइल बफर में खुलने के बाद, बफर को न मारें। जब आप नई फाइलें खोलते हैं तो इसे पृष्ठभूमि में खुला छोड़ दें। बस :eएक ही विंडो में एक नई फ़ाइल।
  5. फिर, :b <tab>बफ़र्स के माध्यम से साइकिल चलाने के लिए उपयोग करें जो पहले से ही पृष्ठभूमि में खुले हैं। यदि आप लिखते हैं तो :b foo<tab>यह केवल वर्तमान में खुली हुई फाइलों के मुकाबले मेल खाएगा foo

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

" Window movements; I do this often enough to warrant using up M-arrows on this"
nnoremap <M-Right> <C-W><Right>
nnoremap <M-Left> <C-W><Left>
nnoremap <M-Up> <C-W><Up>
nnoremap <M-Down> <C-W><Down>

" Open window below instead of above"
nnoremap <C-W>N :let sb=&sb<BAR>set sb<BAR>new<BAR>let &sb=sb<CR>

" Vertical equivalent of C-w-n and C-w-N"
nnoremap <C-w>v :vnew<CR>
nnoremap <C-w>V :let spr=&spr<BAR>set nospr<BAR>vnew<BAR>let &spr=spr<CR>

" I open new windows to warrant using up C-M-arrows on this"
nmap <C-M-Up> <C-w>n
nmap <C-M-Down> <C-w>N
nmap <C-M-Right> <C-w>v
nmap <C-M-Left> <C-w>V

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


4
भयानक विस्फोट के लिए टोपी की टिप। Skillz ++ के लिए उंगली की Wag आपको पहले से ही अन्वेषण को समझने की आवश्यकता है।
श्री बौडिन

257

फ़ाइल सिस्टम को ब्राउज़ करने का एक आसान तरीका कमांड है:

:Sex

मैं इसे नहीं बना रहा हूँ :)


14
और मदद से मैं देख रहा हूँ कि: Vex भी महान है।
jrwren

15
और इसमें 69 अपवोट्स हैं। मुझे नहीं लगता कि मेरे पास इसे बदलने का दिल है।
अल्बेअमाकिर

3
और :Vexयदि आप स्क्रीन को क्षैतिज रूप से विभाजित करना चाहते हैं
श्रीनिवास

1
वाह, इन दोनों में से किसी को भी कभी नहीं पता था। मैं :Vexऔर अधिक व्यावहारिक महसूस कर रहा हूं , लेकिन :Sexसिर्फ अपना दिन बना रहा हूं।
विलियम रॉबर्टसन

2
रिकॉर्ड के लिए :Seभी ( Ve, Teवैरिएंट के लिए भी) काम करता है । इसे अजीब बनाने की कोई आवश्यकता नहीं है :)
20

47

:Sex, :Vex, :Texऔर :Exकर रहे हैं पूर्व के लिए सभी उपयोगी आदेश (ploring) आपके सिस्टम पर फ़ाइलों को आप से कुछ अलग उपयोग करना चाहते हैं:e

( S/V/Tस्प्लिट / वर्टिकल / टैब के लिए कम कहां हैं)


7

यदि आपने उन्हें पहले से नहीं पाया है, तो आप जांचना चाहेंगे:

  • मूल फजी खोजक प्लगइन - जो IIRC रूबी बाध्यकारी मुद्दों नहीं है
  • परियोजना प्लगइन - NERDTree के समान
  • बफर एक्सप्लोरर प्लगइन - खुले बफ़र्स की एक सूची दिखाता है

यह भी ध्यान रखें कि आप अपने कम बोझिल बनाने के लिए अपने .vimrc में मुख्य शॉर्टकटों को रीमैप कर सकते हैं। मैं विभाजित खिड़कियों का उपयोग बहुत करता हूं; मैंने पाया है कि उनके साथ काम करना बहुत आसान है:

" set your own personal modifier key to something handy
let mapleader = "," 

" use ,v to make a new vertical split, ,s for horiz, ,x to close a split
noremap <leader>v <c-w>v<c-w>l
noremap <leader>s <c-w>s<c-w>j
noremap <leader>x <c-w>c

" use ctrl-h/j/k/l to switch between splits
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h

5

मुझे लगता है कि मैं उन टैब के साथ बेहतर करूंगा जिनके बीच मैं आसानी से टॉगल कर सकता हूं, लेकिन शायद मुझे एक अलग वर्कफ़्लो का उपयोग करने की आवश्यकता है।

क्या आपको विम के टैब के बारे में पता है? सुनिश्चित नहीं हैं कि आप विम के अपने टैब का जिक्र कर रहे हैं या टेक्स्टमैट के लिए प्रस्तुत कर रहे हैं। यह स्पष्ट नहीं है कि आप किस विम संस्करण का उपयोग कर रहे हैं, लेकिन इसमें कम से कम 7.0 के बाद से टैब हैं (जो मुझे लगता है कि हर जगह स्थापित किया गया है), और वे कमाल हैं।

:tabeनया टैब खोलता है ("टैब एडिट के लिए छोटा", इसलिए :tabeखाली के लिए या :tabe path/to/fileनए टैब में फ़ाइल खोलने के लिए), आप आसन्न टैब के बीच gt/ / के साथ आगे बढ़ सकते हैं gT, और अन्य टैब-संबंधित नौसेना कमांड का एक गुच्छा भी है, जैसे आप विम से उम्मीद कर सकते हैं ( :help tabs)

बड़ी परियोजनाओं के लिए मेरा वर्कफ़्लो टैब का एक गुच्छा शामिल करने के लिए जाता है, जिनमें से प्रत्येक 1 और 3 खिड़कियों के बीच संदर्भ के आधार पर मुझे किस तरह की आवश्यकता है। यह तब और भी बेहतर काम करता है, जब मेरे पास एक दोहरीव्यापी टर्मिनल विंडो होती है, क्योंकि मैं लंबवत रूप से विभाजित कर सकता हूं :vs, इसलिए एक ही टैब आसानी से मुझे प्रत्येक के लिए बहुत सारे कमरे में एक साथ 4 फाइलें दिखा सकता है।

अंतिम टिप: मैं कभी-कभी "स्विच बफ़र" कमांड ( :sb <partial_buf_name>) का उपयोग करता हूं जो कि टीएम की फजी खोज जैसे थोड़े-थोड़े हैं, इसमें यह बहुत अच्छी तरह से काम करता है लेकिन केवल पहले से ही खुले बफ़र्स के लिए। अभी भी बहुत अच्छा है जब मेरे पास एक दर्जन या अधिक फाइलें एक ही बार में खुली हैं। (NB मुझे :set switchbuf=usetabटैब के पार काम करने के लिए अपने vimrc में आवश्यकता थी , लेकिन एक बार सेट होने के बाद यह बहुत अच्छा है।)


1
टैब की मेरी समझ यह है कि यह एक लेआउट प्रेज़रवर की अधिकता है, न कि वास्तव में प्रत्येक टैब में एक बफ़र खुला होने का एक तरीका है (वीडियो को प्रभावी टेक्स्ट एडिटिंग की 7 आदतों में ब्रैम मोलेनायर्स के अपने विचार देखें)।
Sver

एक बार जब आप इस तरह के आदेशों का पता लगा लेते हैं जो आपके लिए काम करते हैं, तो आप उन्हें एक कुंजी से बांध सकते हैं। मेरे पास खुले बफ़र्स (एक ला फ़ायरफ़ॉक्स) के बीच नियंत्रण-टैब फ्लिप है, लेकिन आप इसके बजाय टैब स्विच कर सकते हैं।
जोनाथन हार्टले

vim-titlecaseजीईटी / जीटी मैपिंग के साथ शिकंजा, लेकिन काम के आसपास है
n

5

मुझे LustyExplorer अब तक का सबसे अच्छा लगता है ।

आप इसके नाम का केवल एक भाग टाइप करके एक फ़ाइल खोल सकते हैं।

आप वर्तमान फ़ाइल की निर्देशिका से फ़ाइल खोल सकते हैं, या वर्तमान pwd, या बफर सूची से।

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

यदि आपके पास है:

dir_a/
    ...
dir_b/
    file.js
    file.html

और आप इसे खोलना dir_b/file.htmlचाहते हैं आमतौर पर आप इसे टाइप करके पा सकते हैंb<Tab>h


मैंने इस भयानक ऐडऑन के लिए कुछ एक्सटेंशन किए। svendtofte.com/wp-content/uploads/2009/08/… svendtofte.com/other/vim-stuff मूल रूप से मुझे हाल ही में उपयोग की गई फ़ाइल का नाम दर्ज करने की अनुमति देता है, चाहे इसकी लोड पहले से ही हो या नहीं, इससे कोई फर्क नहीं पड़ता। इसका मतलब है कि आपको केवल पहली बार फ़ाइल खोलने पर FS को ब्राउज़ करने की आवश्यकता होती है।
Svend

4

यह देखकर आश्चर्य होता है कि :findकिसी भी उत्तर में कमांड का उल्लेख नहीं किया गया है। मैं आमतौर पर रेल परियोजनाओं के साथ काम करता हूं जहां मुझे निर्देशिका पदानुक्रम में गहरी ड्रिल करने की आवश्यकता होती है। तो एक फाइल के लिए application.css, app/assets/stylesheets/सभी में स्थित मुझे टाइप करना है :find applicaऔर फिर टैब को स्वतः पूर्ण करने के लिए दबाएं और खोलने के लिए दर्ज करें।


3

प्लगइन कमांड- T के विकल्प के रूप में प्लगइन ctrlp देखें । यह इस से बेहतर है कि यह एक 'देशी' विम स्क्रिप्ट है और इसे बहुत तेज़ और विनीत तरीके से चलाने के दौरान विम को माणिक (या अन्य समर्थन) के साथ संकलित करने की आवश्यकता है।


2

यदि आप जो फ़ाइल चाहते हैं, वह पहले से ही एक बफर में भरी हुई है (जो कि यदि आप नियमित रूप से मुट्ठी भर फ़ाइलों के बीच फ़्लिप कर रहे हैं) तो आप जल्दी से :b[uffer]कमांड के साथ बफर में स्विच कर सकते हैं ।

:bया तो एक पैरामीटर के रूप में एक बफर नंबर ले सकते हैं, या (अधिक उपयोगी) एक स्ट्रिंग जो पथ / फ़ाइल नाम के भाग से मेल खाती है । यदि कई मैच हैं तो आप उनके माध्यम से चक्र का उपयोग कर सकते हैं।

यदि आप विंडो को विभाजित करना चाहते हैं और नई विंडो में बफर खोलें तो उपयोग करें :sb name

यदि आप बफर को एक नए टैब में खोलना चाहते हैं तो उपयोग करें :tab b name

:lsवर्तमान में लोड किए गए बफ़र्स की सूची देखने के लिए आप कमांड का उपयोग भी कर सकते हैं ।


1

मैं इस फ़ंक्शन का उपयोग उपनिर्देशिकाओं में फ़ाइलों को खोजने के लिए करता हूं, हालांकि मैंने इसे नहीं लिखा था। यह विम विकी से है :

समारोह! खोजें (नाम)
    Let l: list = system ("find। -name '" .a: name। "' | grep -v \" "। svn / \" | perl -ne 'print \ "$। \\ t $ _ \"' ") 
    Let l: num = strlen (स्थानापन्न (l: सूची, "[^ \ n]", "", "g")) 
    यदि एल: संख्या 0 
            गूंज "एक नंबर नहीं" 
            वापसी 
        अगर अंत 
        यदि एल: इनपुट: संख्या 
            गूंज "सीमा से बाहर" 
            वापसी 
        अगर अंत 
        चलो l: लाइन = माचिस ("\ n" .l: सूची, "\ n" .l: इनपुट। "\ t [^ \ n] *") 
    अन्य 
      चलो l: लाइन = l: सूची 
    अगर अंत 
    चलो l: लाइन = स्थानापन्न (l: लाइन, "^ [^ \ t] * \ t। /", "", "") 
    execute ": e" .l: लाइन 
endfunction 

आदेश! -नरग्स = 1 खोजें: कॉल फाइंड ("")

एक चीज जो मुझे पसंद है वह है वाइल्डकार्ड (*) के लिए समर्थन। यह कई मैचों के लिए अच्छा व्यवहार करता है।


1

wildmenuउत्तरों के अलावा , मैं BufExplorer प्लगइन का उपयोग करता हूं , और निम्नलिखित मैपिंग जल्दी से बफ़र्स कूदने के लिए:

nmap <A-1> :b 1<CR>
nmap <A-2> :b 2<CR>
nmap <A-3> :b 3<CR>
...
nmap <A-0> :b 10<CR>
nmap <A-=> \bs

या आप बस बफर एक्सप्लोरर को :lsकमांड के साथ बदल सकते हैं , जो मूल रूप से एक ही चीज़ प्रदर्शित करते हैं।

Alt-=बफर एक्सप्लोरर को दिखाने के लिए पिछले एक मानचित्र ।

मैं विंडोज का उपयोग उतना नहीं करता हूं, जितना कि आम तौर पर मेरे पास एक या दो खिड़कियां होती हैं।

मैंने statuslineबफर संख्या को शामिल करने के लिए भी संशोधित किया %2n, ताकि मुझे हमेशा पता चले कि किस बफर को संपादित किया जा रहा है। देख:h statusline


1

क्या आप मैकविम एप्लिकेशन को जानते हैं? यह ओएस एक्स के लिए पॉलिश किया गया है, और इसकी एक विशेषता टैब के लिए समर्थन है (नया टैब खोलने के लिए सीएमडी + टी), इसमें दराज, आदि हैं ... (इसे पढ़ें: http://zerokspot.com/weblog/2008 / ० 03 / ०३ / मैकविम-ऐस-टेक्स्टमेट-रिप्लेसमेंट / )

कोशिश करो!

सादर मिशाल



0

यहाँ कुछ काफी तुच्छ है जो मैं अपने में चिपका रहा हूँ .vimrc। यह किसी भी उपनिर्देशिका से एक फ़ाइल लोड करेगा।

" load from an unspecified subdirectory 
function! LoadFromSubdirectory(filespec) 
  let filename = glob("`find . -name '" . a:filespec . "' -print`") 
  exe ':e '.filename 
endfunction 
:command -nargs=1 Er :call LoadFromSubdirectory(<f-args>) 

तो मैं कह सकता हूँ:

: एर मेन.जावा

और यह उपनिर्देशिका खोजेगा, इसे खोजेगा Main.javaऔर लोड करेगा। यह समान नाम की कई फ़ाइलों के लिए अच्छा व्यवहार नहीं करता है, लेकिन यह त्वरित और सरल है।

मेरे द्वारा उपयोग किया जाने वाला दूसरा उपकरण VTreeExplorer है , जो फ़ाइलों / निर्देशिकाओं की एक ट्री-आधारित विंडो प्रदान करता है, और VIM (यानी यह एक वैनिला प्लगइन) से किसी विशेष बिल्ड विकल्प की आवश्यकता नहीं है।


मैं एक उप-निर्देशिका से लोड करने में सक्षम होना चाहता हूं, लेकिन कई फाइलें जारी करना मेरे लिए एक सौदा ब्रेकर होगा। मैं एक Django डेवलपर हूं, तो मैं आम तौर पर एक उप-निर्देशिका का एक समूह है सब एक है models.py, views.pyआदि
पीट

0

फ़ाइलों को खोजने के लिए मेरा वर्कफ़्लो Wildmenu, autocwd और है :e

में प्रासंगिक भागों .vimrc:

set wildmenu
set wildignore=*.dll,*.o,*.pyc,*.bak,*.exe,*.jpg,*.jpeg,*.png,*.gif
set wildmode=list:full
set autochdir
let g:netrw_list_hide='^\.,.\(pyc\|pyo\|o\)$'

और इसका उपयोग कैसे करें:

:e myf^D

यह वर्तमान निर्देशिका में सभी फाइलें देता है जो myf से शुरू होती हैं। आप <Tab>उनके माध्यम से भी कर सकते हैं। खोलने के लिए वापसी का उपयोग करें :)

^Dहमेशा आपको सभी मैच देगा। क्योंकि ऑटोकैड हमेशा वर्तमान फ़ाइल के फ़ोल्डर में जाता है जिसके साथ काम करना आसान होता है। यदि आप अंदर हैं foo/bar.pyऔर foo/baz.pyआप केवल आपके पास जाना चाहते हैं :e baz.pyऔर आप वहां हैं। वह बफ़र्स के साथ भी काम करता है ( :b foo^Dसभी शौकीनों को सूचीबद्ध करता है )


कैसे अन्य निर्देशिकाओं के लिए हो रही है? उदाहरण के लिए, मैं अक्सर अपने पायथन दृश्य, HTML टेम्पलेट और जावास्क्रिप्ट फ़ाइलों के बीच काम करता रहूंगा जो सभी अलग-अलग उप-निर्देशिकाओं में रहते हैं? TextMate में, मैं अपने "प्रोजेक्ट" (उर्फ सीडब्ल्यूडी) शो में फ़ाइल का नाम और सभी मैच टाइप करना शुरू करता हूं।
पीट

यह सबफ़ोल्डर्स में पुनरावृत्ति नहीं करता है, नहीं। लेकिन मैंने अपने वर्कफ़्लो को उसी के अनुरूप ढाल लिया। इसके अलावा एक बार फ़ाइल खोलने पर, मैं सिर्फ बफर के नाम का उल्लेख कर सकता हूं और ठीक हूं। आप खुले बफ़र्स को याद करने के लिए विम को बता सकते हैं, फिर आपको आमतौर पर उस सुविधा की आवश्यकता नहीं है।
अर्मिन रोनाचेर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.