2011-05-30 9 views
15

Estoy trabajando en varios proyectos, cada uno de los cuales usa un estilo de sangría diferente (para varios tipos de archivos). Por ejemplo, 1 ficha por nivel de sangría, 2 o 4 espacios, etc. ¿Cómo puedo automatizar el cambio entre estos diferentes estilos? Normalmente prefiero la sangría con pestañas, pero estoy cansado de tener que escribir: establecer expandtabs todo el tiempo cuando se trabaja con código de sangría espacial. Las posibles soluciones incluirían cargar una parte de la configuración de vim basada en la ruta del archivo o alguna configuración en la raíz del proyecto. ¿Hay algún complemento para resolver esto de una manera elegante?¿Cómo puedo lograr una sangría específica del proyecto en vim?

Respuesta

12
  1. considerar la opción cinoptions y softtabstop opción (y expandtab, pero se sabe que).
  2. En su '~/.vimrc', definir entrada en el búfer de auto-comandos para cada directorio donde guarda las fuentes de algunos proyectos como:

    augroup ProjectSetup 
    au BufRead,BufEnter /path/to/project1/* set et sts=2 cindent cinoptions=... 
    au BufRead,BufEnter /path/to/project2/* set noet sts=4 cindent cinoptions=... 
    augroup END 
    

    Si el proyecto tiene mezcla de idiomas y necesita diferentes ajustes para a continuación, también se puede añadir extensiones como:

    au BufRead,BufEnter /path/to/project1/*.{c,h} set noet sts=0 cindent cinoptions=... 
    au BufRead,BufEnter /path/to/project1/*.py set et sts=4 
    
+0

¿Puede sugerir una forma de distinguir entre idiomas según los tipos de archivos vim, no las extensiones de archivo? Me gusta tu respuesta, pero esta parte parece repetir partes de mi configuración. ¡Gracias! – VoY

+0

@VoY: También existe el evento 'FileType' para autocomandos. Pero su patrón coincide con el tipo de archivo, por lo que debe verificar la ruta usted mismo. O puede poner el código en '~/.vim/after/ftplugin/ .vim', pero nuevamente debe verificar la ruta usted mismo. –

14

utilizo el plugin localvimrc, que hace exactamente lo que está pidiendo:

A veces, cuando trabajas en diferentes proyectos, tienes el problema, que usan diferentes sangrías, expansión de pestañas, etc. Es necesario vimrc para cada proyecto que anula la configuración preferidas de ~/.vimrc

3

Sí, hay: Si está utilizando el Project Plugin, puede especificar un archivo cuyo contenido está siendo evaluado cada vez que se abra un archivo del proyecto (este archivo se llama in.vim). El opuesto de in.vim es out.vim: este se ejecuta cada vez que abandona el proyecto.

+0

Actualmente uso el plugin de proyecto, pero cambié a los autocomandos (vea la otra respuesta) para configurar las opciones específicas del proyecto (también configuré cosas como makeprg y demás). El problema con in/out.vim del plugin del proyecto es que no se ejecuta si primero ingresas un buffer no desde el plugin del proyecto, sino por ejemplo desde la lista quickfix (después de ': make' o': grep') o explícita (' : e%: rh' a menudo es bastante útil en C/C++). –

3

EditorConfig y es Vim plugin:

Lo que es EditorConfig?

EditorConfig ayuda a los desarrolladores a definir y mantener la codificación coherente de los estilos entre diferentes editores e IDE. El proyecto EditorConfig consiste en un formato de archivo para definir estilos de codificación y una colección de complementos de editor de texto que permiten a los editores leer el formato de archivo y se adhieren a los estilos definidos. Los archivos EditorConfig son fáciles de leer y funcionan muy bien con los sistemas de control de versiones.

Entre otras cosas, le permite establecer la sangría. Es muy sencillo y, lo que es más importante, es una forma estandarizada compatible con muchos editores e IDE-s diferentes, de modo que establecerá la sangría adecuada no solo para usted, sino probablemente para todas las personas que trabajen en un proyecto.

Solo tiene que crear un archivo .editorconfig en la raíz del proyecto y Vim lo busca automáticamente (suponiendo que tenga el complemento instalado), estableciendo los valores adecuados.Archivo de configuración de ejemplo:

root = true 

[*] 
charset = utf-8 
end_of_line = lf 
indent_style = space 
indent_size = 4 
insert_final_newline = true 
trim_trailing_whitespace = true 

[*.{js,html}] 
indent_size = 2 

[*.css] 
indent_size = 4 
Cuestiones relacionadas