2009-02-23 4 views
13

Je me demandais s'il y avait un moyen d'obtenir vim pour lire les fichiers .gitignore et les utiliser pour déterminer les options à ne pas présenter lors de l'auto-complétion des noms de fichiers. Par exemple, en travaillant en python, je ne voudrais pas voir les fichiers .pyc proposés pour l'édition. Je pense que vim a son propre mécanisme pour cela, je me demandais comment charger des informations de .gitignore dans celui-ci.Puis-je faire en sorte que vim respecte mes fichiers .gitignore?

Répondre

21

Comme le suggère @dwc, voici un script vim:

let filename = '.gitignore' 
if filereadable(filename) 
    let igstring = '' 
    for oline in readfile(filename) 
     let line = substitute(oline, '\s|\n|\r', '', "g") 
     if line =~ '^#' | con | endif 
     if line == '' | con | endif 
     if line =~ '^!' | con | endif 
     if line =~ '/$' | let igstring .= "," . line . "*" | con | endif 
     let igstring .= "," . line 
    endfor 
    let execstring = "set wildignore=".substitute(igstring, '^,', '', "g") 
    execute execstring 
endif 

Prenez cette source et le mettre dans un fichier dans votre répertoire de plug-in, comme ~/.vim/plugin/gitignore.vim. Il va lire votre fichier .gitignore et l'analyser, en transformant son format en un format approprié pour wildignore, puis définir cette option.

Limitations:

  • Cela lire le fichier .gitignore à partir du répertoire où vous lancez vim. Aucun effort n'est fait pour rechercher d'autres fichiers .gitignore et les analyser. Vous pouvez également spécifier un chemin absolu vers un fichier sur la première ligne.
  • L'option wildignore dans vim ne prend pas en charge la notion de la négation ignore comme vous pouvez dans un fichier .gitignore. Autrement dit, vous ne pouvez pas dire :set wildignore=*.html,!foo.html pour qu'il ignore tous les fichiers html sauf foo.html. Par conséquent, .gitignore lignes qui commencent par! sont simplement ignorés.
+0

Pour info, voici le code sur vim.org: http: //www.vim.org/scripts/script.php? script_id = 2557 – Florian

+4

Remplace 'set wildignore =' par 'set wildignore + ='. De cette façon, vos précédents paramètres ignorés ne sont pas écrasés. – silvenon

+0

Comment faites-vous ce travail pour les chemins racine? ("/blabla") – silvenon

18

Vim modèles de fichiers ignorer spécifiés dans l'option wildignore, de sorte que vous pouvez les définir comme ceci:

:set wildignore=*.o,*~,*.pyc 

Ou placer la même ligne (sans « : ») dans votre fichier ~/.vimrc. Si vous avez besoin de quelque chose de plus dynamique comme ajuster le .gitignore dans le répertoire courant, alors vous devrez faire quelques scripts, mais je laisserai cela comme un exercice pour quelqu'un d'autre.

+2

Bonne réponse. Note: Vous ne pouvez pas avoir d'espaces entre le \ *. O \ * ~ et \ *. Pyc, donc ce devrait être: ': set wildignore = *. O, * ~, *. Pyc'. Cheers –

2

j'ai écrit un plugin pour cela: https://github.com/octref/RootIgnore

Il peut ajouter .gitignore modèles à votre wildignore automatiquement.
Quelques fonctionnalités pratiques:

  • Lorsque vous êtes dans un sous-répertoire, comme ceci:
my_proj/ 
    .gitignore 
    .git/ 
    sub/ 

Si vous cd en sous et ouvrez vim là, le plugin GOES récursivement jusqu'à trouver le .gitignore et l'ajouter à wildignore.

  • Vous pouvez facilement ajouter des règles ~/.gitignore par let g:RootIgnoreUseHome = 1.
Questions connexes