Proje ağacının derinliklerinde dosyaları bulmanın ve açmanın etkili bir yolu var mı?


12

Gibi eklentileri olmadan ctrlpve NERDTreene derin bir proje ağacındaki açık dosyaları bulmak ve en etkili yolu olurdu?

Ayar pathiçin **/*gereksiz dosyaları sonuçların .gitgörünür söz konusu olması, böylece, ve diğer gizli dizinleri.

Yolu akıllı bir şekilde ayarlamanın bir yolu var mı , böylece yalnızca dosyaları git ls-filesfalan içeriyor mu?

Yanıtlar:


24

İşte kurulumumun ilgili kısımları:

  • wildmenu etkinleştirin,

    set wildmenu
    
  • bu dosya ve dizinleri dosya adı-tamamlamayı atla,

    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.*
    
  • büyük / küçük harfe duyarsız hale getirmek,

    set wildignorecase
    
  • dosyaları listeler ve kullanıcının wildmenu ile seçim yapmasına izin verir,

    set wildmode=list:full
    
  • geçerli dosyanın dizinini ve çalışma dizini altındaki her dizini Vim'lere ekleyin path,

    set path=.,**
    

    UYARI! Yol seçeneği son derece kullanışlıdır. Yukarıdaki değer - .,**- benim için çalışıyor ancak kullandığım dillerin standart bir kütüphanesi yok. Doğru değeri tamamen bağlıdır senin ihtiyaçlarına.

  • bir grup :findeşleme, büyük harf varyantları daha iyi performans için mevcut dosyanın dizininden aramayı başlatır,

    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>
    

Ve işte şöyle görünüyor:

buluntu


1
Vay, bunlar harika haritalamalar ve ayarlar. Ayrıntılı cevap için teşekkür ederim.

3

Görmek :h :command-completion-custom

Son örneği yalnızca git tarafından listelenen dosyaları tamamlayacak şekilde uyarlayabiliriz.

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

Artık git ile listelenen dosyaları açmak için otomatik tamamlamayı kullanabilirsiniz:

:GitFind ome_f<Tab>

Özel bir tamamlama işlevinde, tamamlanabilecek dosyaları listelemekten daha fazlasını yapmamız gerektiğini unutmayın. Ayrıca , listeyi geçerli komut satırı bağımsız değişkenine göre filtrelemeliyizArgLead . Bu örnekte, gitfiltrelemeyi, *joker karakterlere sarılmış argümanı geçirerek bizim için yapmayı istiyoruz .


Bu mükemmel bir numara

1

Benim yöntem aşağıdaki kabuk işlevi içerir ~/.bash_profile:

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

Sonra proje ağacının derinliklerinde herhangi bir dosyayı açmak için şunu yazın:

vimf some_file.c
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.