Un moyen efficace de trouver et d'ouvrir des fichiers au fond d'une arborescence de projet?


12

Sans plugins comme ctrlpet NERDTree, quel serait le moyen le plus efficace pour trouver et ouvrir des fichiers au fond d'une arborescence de projet?

La définition de pathto **/*entraîne la création de fichiers inutiles .gitet d'autres répertoires masqués, ce qui semble hors de question.

Existe-t-il un moyen de définir le chemin de manière intelligente , afin qu'il n'inclue que des fichiers git ls-filesou quelque chose?

Réponses:


24

Voici les parties pertinentes de ma configuration:

  • activer le menu sauvage,

    set wildmenu
    
  • faire en sorte que l'achèvement du nom de fichier saute ces fichiers et répertoires,

    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.*
    
  • le rendre insensible à la casse,

    set wildignorecase
    
  • lister les fichiers et laisser l'utilisateur choisir avec le wildmenu,

    set wildmode=list:full
    
  • ajouter le répertoire du fichier courant et chaque répertoire du répertoire de travail à Vim's path,

    set path=.,**
    

    ATTENTION! L'option de chemin est extrêmement utile. La valeur ci-dessus - .,**- fonctionne pour moi mais les langues que j'utilise n'ont pas de bibliothèque standard. La valeur appropriée dépend entièrement de vos besoins.

  • un tas de :findmappages, les variantes majuscules démarrent la recherche depuis le répertoire du fichier courant pour de meilleures performances,

    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>
    

Et voici à quoi ça ressemble:

:trouver


1
Wow, ce sont d'excellents mappages et paramètres. Merci pour la réponse détaillée.

3

Voir :h :command-completion-custom

Nous pouvons adapter le dernier exemple pour ne compléter que les fichiers listés par 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

Vous pouvez maintenant utiliser la saisie semi-automatique pour ouvrir les fichiers répertoriés par git:

:GitFind ome_f<Tab>

Notez que dans une fonction de complétion personnalisée, nous devons faire plus que simplement lister les fichiers qui pourraient être complétés. Nous devons également filtrer la liste par rapport à l'argument de ligne de commande actuel ArgLead. Dans cet exemple, nous demandons gitde faire le filtrage pour nous, en lui passant l'argument enveloppé de *caractères génériques.


C'est une excellente astuce

1

Ma méthode inclut la fonction shell suivante dans ~/.bash_profile:

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

Ensuite, pour ouvrir un fichier au fond de l'arborescence du projet, tapez simplement:

vimf some_file.c
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.