Modo efficiente per trovare e aprire i file in profondità nell'albero di un progetto?


12

Senza plugin come ctrlpe NERDTree, quale sarebbe il modo più efficiente per trovare e aprire i file in profondità in un albero del progetto?

L'impostazione pathsu **/*produce file inutili in .gite altre directory nascoste, in modo che sembri essere fuori discussione.

C'è un modo per impostare il percorso in modo intelligente , in modo che includa solo i file git ls-fileso qualcosa del genere?

Risposte:


24

Ecco le parti rilevanti della mia configurazione:

  • abilitare il wildmenu,

    set wildmenu
    
  • fai in modo che il completamento del nome file salti questi file e directory,

    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.*
    
  • renderlo maiuscole e minuscole,

    set wildignorecase
    
  • elenca i file e consenti all'utente di scegliere con il menu selvaggio,

    set wildmode=list:full
    
  • aggiungi la directory del file corrente e ogni directory nella directory di lavoro a Vim's path,

    set path=.,**
    

    AVVERTIMENTO! L'opzione path è estremamente utile. Il valore sopra - .,**- funziona per me ma le lingue che uso non hanno una libreria standard. Il valore corretto dipende interamente dalle tue esigenze.

  • un mucchio di :findmappature, le varianti maiuscole iniziano la ricerca dalla directory del file corrente per prestazioni migliori,

    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>
    

Ed ecco come appare:

:trova


1
Caspita, queste sono alcune fantastiche mappature e impostazioni. Grazie per la risposta dettagliata

3

Vedere :h :command-completion-custom

Possiamo adattare l'ultimo esempio per completare solo i file elencati da 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

Ora puoi usare il completamento automatico per aprire i file elencati da git:

:GitFind ome_f<Tab>

Si noti che in una funzione di completamento personalizzata, dobbiamo fare di più che semplicemente elencare i file che potrebbero essere completati. Dobbiamo anche filtrare l'elenco in relazione all'argomento corrente della riga di comando ArgLead. In questo esempio, chiediamo gitdi fare il filtro per noi, passandogli l'argomento racchiuso tra *caratteri jolly.


Questo è un trucco eccellente

1

Il mio metodo include la seguente funzione shell in ~/.bash_profile:

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

Quindi per aprire qualsiasi file in profondità nella struttura del progetto, basta digitare:

vimf some_file.c
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.