2009-02-23 9 views
13

Mi chiedevo se c'è un modo per ottenere vim per leggere i file .gitignore e usarli per determinare le opzioni da non presentare quando si completano automaticamente i nomi dei file.Posso fare in modo che vim rispetti i miei file .gitignore?

Ad esempio, lavorando in python, mi piacerebbe non vedere i file .pyc offerti per la modifica. Penso che Vim abbia il suo meccanismo per questo, mi chiedevo come caricare le informazioni da .gitignore al suo interno.

risposta

21

Come suggerito da @dwc, ecco uno 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 

Take That fonte e metterlo in un file nella directory dei plugin, come ad esempio ~/.vim/plugin/gitignore.vim. Legge il file .gitignore e lo analizza, trasformandone il formato in uno adatto per wildignore e quindi imposta tale opzione.

Limitazioni:

  • Questo leggerà il file .gitignore dalla directory in cui si avvia vim. Non viene effettuato alcuno sforzo per cercare altri file .gitignore e analizzarli. In alternativa, è possibile specificare un percorso assoluto per un file sulla prima riga.
  • L'opzione wildignore in vim non supporta la nozione di negando ignora come è possibile in un file .gitignore. Cioè, non puoi dire :set wildignore=*.html,!foo.html per far ignorare tutti i file html tranne foo.html. Pertanto, .gitignore righe che iniziano con! sono semplicemente ignorati.
+0

FYI, ecco il codice su vim.org: http: //www.vim.org/scripts/script.php? script_id = 2557 – Florian

+4

Cambia 'set wildignore =' per 'set wildignore + ='. In questo modo le precedenti impostazioni di ignora non vengono sovrascritte. – silvenon

+0

Come si fa a funzionare per i percorsi di root? ("/ Bla") – silvenon

18

Vim ignorerà i modelli di file specificati nell'opzione wildignore, in modo è possibile impostare in questo modo:

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

oppure posizionare la stessa linea (senza il ":") nel file ~/.vimrc. Se hai bisogno di qualcosa di più dinamico come la regolazione di .gitignore nella directory corrente, dovrai eseguire alcuni script, ma lo lascerò come esercizio per qualcun altro.

+2

Ottima risposta. Nota: non è possibile avere spazi tra \ *. O \ * ~ e \ *. Pyc, quindi dovrebbe essere: ': set wildignore = *. O, * ~, *. Pyc'. Cheers –

2

Ho scritto un plugin per questo: https://github.com/octref/RootIgnore

E 'possibile aggiungere .gitignore modelli al vostro wildignore automaticamente.
Alcune funzioni utili:

  • Quando si è in una sottodirectory, in questo modo:
my_proj/ 
    .gitignore 
    .git/ 
    sub/ 

Se cd in sub, e aperto Vim lì, il plug-in va fino a trovare il .gitignore in modo ricorsivo e aggiungerlo a wildignore.

  • È possibile aggiungere facilmente le regole ~/.gitignore entro il let g:RootIgnoreUseHome = 1.
Problemi correlati