एक परियोजना के पेड़ में गहरी फाइलों को खोजने और खोलने का कुशल तरीका?


12

प्लगइन्स की तरह ctrlpऔर NERDTree, एक परियोजना के पेड़ में गहरी फ़ाइलों को खोजने और खोलने का सबसे कुशल तरीका क्या होगा?

स्थापना pathके लिए **/*में बेकार फाइलों में परिणाम .gitऔर अन्य छिपा निर्देशिका है, तो दिखाई देने वाले सवाल से बाहर किया जाना है।

क्या स्मार्ट तरीके से रास्ता तय करने का कोई तरीका है, ताकि इसमें केवल git ls-filesया कुछ में फाइलें शामिल हों ?

जवाबों:


24

मेरे सेटअप के प्रासंगिक हिस्से इस प्रकार हैं:

  • Wildmenu को सक्षम करें,

    set wildmenu
    
  • फ़ाइल नाम पूरा करना इन फ़ाइलों और निर्देशिकाओं को छोड़ें,

    set wildignore+=*.swp,*.bak
    set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
    set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
    set wildignore+=*/min/*
    set wildignore+=tags,cscope.*
    set wildignore+=*.tar.*
    
  • इसे मामला-असंवेदनशील बनायें,

    set wildignorecase
    
  • फ़ाइलों को सूचीबद्ध करें और उपयोगकर्ता को Wildmenu के साथ चुनने दें,

    set wildmode=list:full
    
  • वर्तमान फ़ाइल की निर्देशिका और काम निर्देशिका के तहत प्रत्येक निर्देशिका को विम के लिए जोड़ें path;

    set path=.,**
    

    चेतावनी! पथ विकल्प बेहद उपयोगी है। उपरोक्त मान - .,**- मेरे लिए काम करता है, लेकिन मैं जिन भाषाओं का उपयोग करता हूं, उनके पास एक मानक पुस्तकालय नहीं है। उचित मूल्य पर निर्भर करता है आपकी जरूरतों।

  • :findमैपिंग का एक गुच्छा , अपरकेस वेरिएंट बेहतर प्रदर्शन के लिए वर्तमान फ़ाइल की निर्देशिका से खोज शुरू करते हैं,

    nnoremap ,f :find *
    nnoremap ,F :find <C-R>=expand('%:p:h').'/**/*'<CR>
    nnoremap ,s :sfind *
    nnoremap ,S :sfind <C-R>=expand('%:p:h').'/**/*'<CR>
    nnoremap ,v :vert sfind *
    nnoremap ,V :vert sfind <C-R>=expand('%:p:h').'/**/*'<CR>
    

और यहाँ है कि यह कैसा दिखता है:

: खोज


1
वाह, ये कुछ बेहतरीन मैपिंग और सेटिंग्स हैं। विस्तृत उत्तर के लिए धन्यवाद।

3

देख :h :command-completion-custom

हम गिट द्वारा सूचीबद्ध केवल फाइलों को पूरा करने के लिए अंतिम उदाहरण को अनुकूलित कर सकते हैं।

command! -nargs=1 -bang -complete=customlist,GitFindComplete
      \ GitFind edit<bang> <args>

function! GitFindComplete(ArgLead, CmdLine, CursorPos)
  let search_pattern = "*" . a:ArgLead . "*"
  let shell_cmd = "git ls-files " . shellescape(search_pattern)
  return split(system(shell_cmd), "\n")
endfunction

अब आप git द्वारा सूचीबद्ध फाइलों को खोलने के लिए स्वतः पूर्णता का उपयोग कर सकते हैं:

:GitFind ome_f<Tab>

ध्यान दें कि एक कस्टम समापन समारोह में, हमें उन फाइलों को सूचीबद्ध करने से अधिक करना चाहिए, जिन्हें पूरा किया जा सकता है। हमें वर्तमान कमांडलाइन तर्क के सापेक्ष सूची को फ़िल्टर करना होगा ArgLead। इस उदाहरण में, हम वाइल्डकार्ड gitमें लिपटे *हुए तर्क को पारित करके, हमारे लिए फ़िल्टरिंग करने के लिए कहते हैं ।


यह एक उत्कृष्ट चाल है

1

मेरी विधि में निम्नलिखित शेल फ़ंक्शन शामिल हैं ~/.bash_profile:

vimf() {
  vim $(find . -name $1)
}

फिर प्रोजेक्ट ट्री में कोई भी फ़ाइल खोलने के लिए, बस टाइप करें:

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