2009-02-23 15 views
13

Zastanawiam się, czy istnieje sposób, aby vim odczytywał pliki .gitignore i używał ich do określania opcji, które nie pojawią się podczas automatycznego uzupełniania nazw plików.Czy mogę vim szanować moje pliki .gitignore?

Na przykład, pracując w Pythonie, nie chciałbym widzieć plików .pyc przeznaczonych do edycji. Myślę, że vim ma swój własny mechanizm, zastanawiałem się, jak załadować do niego informacje z .gitignore.

Odpowiedz

21

Jak sugeruje @dwc, oto skrypt 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 

Weź to źródło i umieścić go w pliku w katalogu wtyczek, takich jak ~/.vim/plugin/gitignore.vim. Przeczyta plik .gitignore i przetworzy go, przekształcając jego format na format odpowiedni dla wildignore, a następnie ustawi tę opcję.

Ograniczenia:

  • ten odczyta plik .gitignore z katalogu, w którym uruchomić vim. Nie próbujemy szukać innych plików .gitignore i analizować ich. Alternatywnie możesz podać bezwzględną ścieżkę do pliku w pierwszym wierszu.
  • Opcja wildignore w vim nie obsługuje pojęcia negowania ignoruje jak można w pliku .gitignore. Oznacza to, że nie można powiedzieć, że :set wildignore=*.html,!foo.html ma zignorować wszystkie pliki html z wyjątkiem foo.html. Dlatego linie .gitignore zaczynają się od! są po prostu ignorowane.
+0

FYI, oto kod na vim.org: http: //www.vim.org/scripts/script.php? script_id = 2557 – Florian

+4

Zmień 'set wildignore =' na 'ustaw wildignore + ='. W ten sposób poprzednie ustawienia ignorowania nie zostaną nadpisane. – silvenon

+0

Jak to działa w przypadku ścieżek głównych? ("/ blah") – silvenon

18

Vim będzie ignorować wzorce pliku podanego w opcji wildignore, więc można ustawić je tak:

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

Albo umieścić tę samą linię (bez „”) w pliku ~/.vimrc. Jeśli potrzebujesz czegoś bardziej dynamicznego, jak dostosowanie do pliku .gitignore w bieżącym katalogu, musisz wykonać kilka skryptów, ale zostawię to jako ćwiczenie dla kogoś innego.

+2

Świetna odpowiedź. Uwaga: Nie można mieć spacji między \ *. O \ * ~ i \ *. Pyc, więc powinno być: ': ustaw wildignore = *. O, * ~, *. Pyc'. Na zdrowie –

2

Napisałem ten plugin: https://github.com/octref/RootIgnore

Można dodać .gitignore wzorce do wildignore automatycznie.
Kilka przydatnych funkcji:

  • Kiedy jesteś w podkatalogu, na przykład:
my_proj/ 
    .gitignore 
    .git/ 
    sub/ 

Jeśli cd na mniejsze, a otwarte Vim tam plugin idzie rekursywnie, aby znaleźć numer .gitignore i dodać go do wildignore.

  • Możesz łatwo dodać reguły ~/.gitignore przez let g:RootIgnoreUseHome = 1.
Powiązane problemy