Ефективний спосіб пошуку та відкриття файлів у глибині дерева проектів?


12

Без плагінів як ctrlpі NERDTree, який би був найефективніший спосіб пошуку та відкриття файлів у глибині дерева проектів?

Установка pathдля **/*результатів в марних файлів .gitі інших прихованих каталогів, так що , як представляється, може бути і мови.

Чи є спосіб встановити шлях розумним чином, щоб він включав лише файли в git ls-filesщось таке?

Відповіді:


24

Ось відповідні частини мого налаштування:

  • включення дикого меню,

    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
    
  • перелічити файли та дозволити користувачеві обирати за допомогою дикого меню,

    set wildmode=list:full
    
  • додати каталог поточного файлу та кожного каталогу під робочим каталогом до Vim's 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

Ми можемо адаптувати останній приклад для завершення лише файлів, перелічених git.

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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.