2009-09-18 11 views
64

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

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

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

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

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

मैं था भी तरह एक "फ़ाइल में ... गो" सीएमडी + टी TextMate में तरह शॉर्टकट। मुझे fuzzy_file_finder मिला है, लेकिन इसके लिए रूबी बाइंडिंग के साथ विम की आवश्यकता होती है, जो मूल आधार पर मैंने काम नहीं किया है।

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

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

+1

मुझे फ़ाइलों और बफरों को नेविगेट करने का वास्तव में संतोषजनक तरीका नहीं मिला है, जो कि कोई बाहरी सहायता नहीं करता है। निर्मित सामग्री बहुत खराब है (मेरा मतलब है, इसकी संख्या से एक बफर में बदल रहा है? अस्थायी बफर संख्याओं को याद रखने के लिए कौन जाता है ...) – Svend

+1

@svend: आप बफर को नाम के साथ-साथ संख्या के रूप में भी देख सकते हैं - नीचे मेरा उत्तर देखें –

उत्तर

72

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

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

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

मेरे कार्यप्रवाह इस तरह है:

  1. अपने प्रोजेक्ट की उच्चस्तरीय निर्देशिका में :cd

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

    • फ़ाइल foo/bar/baz खोलने के लिए।

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

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

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

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

+2

ओह है। मेरे। परमेश्वर। महोदय; धन्यवाद। –

+3

भयानक स्पष्टीकरण के लिए टोपी की युक्ति। Skillz ++ के लिए उंगली के पंख को आपको पहले से ही स्पष्टीकरण को समझना होगा। –

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

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

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

+0

मैं उप-निर्देशिका से लोड करने में सक्षम होना चाहता हूं, लेकिन एकाधिक फाइल समस्या मेरे लिए एक सौदा ब्रेकर होगा। मैं एक Django डेवलपर हूं, इसलिए मेरे पास आमतौर पर उप-निर्देशिकाओं का एक गुच्छा है जिसमें सभी के पास 'models.py', 'views.py', – Pete

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 हमेशा आप सभी मैचों दे देंगे वापसी का प्रयोग करें।चूंकि autocmd हमेशा मौजूदा फ़ाइल के फ़ोल्डर में जाता है, जिसके साथ काम करना आसान होता है। यदि आप foo/bar.py में हैं और आप foo/baz.py पर जाना चाहते हैं तो आप केवल :e baz.py पर हैं और आप वहां हैं। यही कारण है कि यह भी बफ़र्स के साथ (:b foo^D सूचियों सभी बफ़र्स foo के साथ शुरू)

+0

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

+0

यह सबफ़ोल्डर में नहीं है, नहीं। लेकिन मैंने अपने वर्कफ़्लो को उस पर अनुकूलित किया। एक बार फ़ाइल खोलने के बाद, मैं सिर्फ बफर के नाम का उल्लेख कर सकता हूं और ठीक हूं। आप खुले बफर को याद रखने के लिए विम को बता सकते हैं, तो आपको आमतौर पर उस सुविधा की आवश्यकता नहीं होती है। –

4

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

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

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

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

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

+1

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

+0

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

5

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

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

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

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

यदि आपके पास:

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

और आप आमतौर पर

+0

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

6

टाइप करके इसे पा सकते हैं आप उन्हें पहले से ही नहीं मिला है, तो आप की जाँच करने के लिए चाहते हो सकता है आप dir_b/file.html खोलना चाहते हैं:

  • मूल fuzzy finder प्लगइन - जो 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 
+0

http://github.com/jamis/fuzzyfinder_textmate बेहतर – aehlke

1

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

 
function! Find(name) 
    let l:list=system("find . -name '".a:name."' | grep -v \".svn/\" | perl -ne 'print \"$.\\t$_\"'") 
    let l:num=strlen(substitute(l:list, "[^\n]", "", "g")) 
    if l:num 0 
      echo "Not a number" 
      return 
     endif 
     if l:inputl:num 
      echo "Out of range" 
      return 
     endif 
     let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*") 
    else 
     let l:line=l:list 
    endif 
    let l:line=substitute(l:line, "^[^\t]*\t./", "", "") 
    execute ":e ".l:line 
endfunction 

command! -nargs=1 Find :call Find("") 

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

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-= को बफर एक्सप्लोरर दिखाने के लिए मानचित्र करता है।

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

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

1

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

इसे आजमाएं!

सादर मीकल

+0

इसमें कोई दराज नहीं है – aehlke

183

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

:Sex 

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

+53

+1 सेक्स ने मेरा दिन बनाया! :-) –

+11

और सहायता से मैं देखता हूं कि: Vex भी बहुत अच्छा है। – jrwren

+1

: सेक्सप्लोर ... हाँ! – Kasapo

2

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

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

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

आप एक नए टैब में बफर खोलने के लिए तो :tab b name

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

23

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

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

3

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

2

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