2009-02-23 13 views
13

Me preguntaba si hay una manera de conseguir vim para leer archivos .gitignore y utilizarlos para determinar las opciones de no presentar cuando los nombres de archivo de auto-completar.¿Puedo hacer que vim respete mis archivos .gitignore?

Por ejemplo, trabajar en Python, me gustaría no ver .pyc archivos ofrecidos para su edición. Creo que vim tiene su propio mecanismo para esto, me preguntaba cómo cargar información de .gitignore en él.

Respuesta

21

Como sugiere @dwc, aquí es una secuencia de comandos de 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 

Toma lo que es la fuente y la puso en un archivo en el directorio de plugins, como ~/.vim/plugin/gitignore.vim. Leerá su archivo .gitignore y lo analizará, transformando su formato en uno adecuado para wildignore, y luego establezca esa opción.

Limitaciones:

  • Esto leerá el archivo .gitignore desde el directorio donde se inicia vim. No se realizan esfuerzos para buscar otros archivos .gitignore y analizarlos. Alternativamente, puede especificar una ruta absoluta a un archivo en la primera línea.
  • La opción wildignore en vim no es compatible con la noción de negando ignora como se puede en un archivo .gitignore. Es decir, no puede decir :set wildignore=*.html,!foo.html para que ignore todos los archivos html excepto foo.html. Por lo tanto, .gitignore líneas que comienzan con! simplemente son ignorados.
+0

FYI, aquí está el código en vim.org: http: //www.vim.org/scripts/script.php? script_id = 2557 – Florian

+4

Cambiar 'set wildignore =' to 'set wildignore + ='. De esta forma, las configuraciones de ignorar anteriores no se sobrescribirán. – silvenon

+0

¿Cómo se puede hacer esto para las rutas raíz? ("/paja") – silvenon

18

Vim ignorar los patrones de archivos especificados en la opción wildignore, por lo que puede ponerlos así:

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

O colocar la misma línea (sin el ":") en el archivo ~/.vimrc. Si necesita algo más dinámico como ajustarse al .gitignore en el directorio actual, entonces necesitará hacer algunas secuencias de comandos, pero lo dejo como ejercicio para otra persona.

+2

Gran respuesta. Nota: No puede haber espacios entre el \ *. O \ * ~ y \ *. Pyc, por lo que debería ser: ': set wildignore = *. O, * ~, *. Pyc'. Cheers –

2

escribí un plugin para esto: https://github.com/octref/RootIgnore

Se puede añadir .gitignore patrones a su wildignore automáticamente.
Algunas características útiles:

  • Cuando usted está en un subdirectorio, como esto:
my_proj/ 
    .gitignore 
    .git/ 
    sub/ 

Si cd en sub, y abierto Vim allí, el plugin va recursivamente hasta encontrar el .gitignore y agréguelo al wildignore.

  • Puede agregar fácilmente reglas ~/.gitignore por let g:RootIgnoreUseHome = 1.
Cuestiones relacionadas