¿Cómo cargar un archivo .vimrc diferente para un directorio de trabajo diferente?

Tengo una opción diferente para cada directorio de trabajo. no quiero set estas opciones cada vez que trabajo. Sé que puedo agregar vimrc archivo para las opciones, pero no quiero usar la misma configuración en todos los directorios. ¿Cómo puedo hacer con esta situación?

Ejemplo:

Para el proyecto javascript, quiero cargar la configuración desde ~/.vimrc_js

Para el proyecto Python, quiero cargar la configuración desde ~/.vimrc_py

preguntado el 21 de septiembre de 13 a las 12:09

Problema XY ¡alerta! Parece bastante como si quisiera configuraciones específicas del tipo de archivo, no configuraciones específicas del directorio. -

@romainl eso es solo un ejemplo. También necesito muchas configuraciones específicas del directorio, como el diccionario que quiero incluir para este proyecto. Perdón por dejarlo poco claro. -

5 Respuestas

Si cada proyecto usa un idioma distinto, el complemento de tipo de archivo incorporado (ftplugin), como lo describe Jamie Schembri, funcionará bien. Si realmente necesita configuraciones diferentes para el mismo tipo de archivos, siga leyendo:

Configuración central

Si está bien configurar las excepciones locales de forma centralizada, puede poner tales autocmds en su ~/.vimrc:

:autocmd BufRead,BufNewFile /path/to/dir/* setlocal ts=4 sw=4

Por otro lado, si desea que la configuración específica se almacene con el proyecto (y no desea incrustar esto en todos los archivos a través de modelos), tiene las siguientes dos opciones:

Configuración local con funcionalidad integrada

Si siempre inicia Vim desde el directorio raíz del proyecto, el

:set exrc

permite la lectura de un .vimrc archivo del directorio actual. Puedes colocar el :set ts=4 sw=4 comandos allí.

Configuración local a través del complemento

De lo contrario, necesita la ayuda de un complemento; hay varios en vim.org; Puedo recomendar el complemento localrc, que incluso permite la configuración específica del tipo de archivo local.

Tenga en cuenta que leer la configuración del sistema de archivos tiene implicaciones de seguridad; es posible que desee :set secure.

Respondido el 21 de Septiembre de 13 a las 15:09

:set secure es completamente inútil: solo pon call feedkeys(":!echo 1>2\n") dentro .exrc y ver archivo 2 Aparecer. Por lo tanto, está seguro de que todos estos archivos aparecen solo de fuentes confiables o nunca usa set exrc. - ZyX

No, me estoy equivocando. Es completamente inútil porque "En Unix, esta opción solo se usa si el ".vimrc" o ".exrc" no es de su propiedad".: esto permite call feedkeys() a pesar de set secure. - ZyX

También formas interesantes de eludir set secure: let g:http_netrw_cmd="some cmd that downloads and starts remote shell" asumiendo que uno sabe que el objetivo está usando netrw para ver archivos remotos; command -nargs=? -bar AuV :execute "!some cmd…"|AuVimDiff <args> asumiendo que uno sabe que el objetivo está usando aurum y su AuVimDiff comando y así sucesivamente. Es mejor saber que 'seguro' es inútil que confiar en lo que hace. Si aparecen construcciones maliciosas en el archivo, se trata de un ataque dirigido en un 90 %. set secure es inútil contra este tipo de ataques. - ZyX

También es inútil contra las construcciones maliciosas enviadas al repositorio público: después de clonar los VCS, asigne al usuario actual como propietario de los archivos en el directorio de trabajo, evitando así set secure en sistemas Unix. - ZyX

+1 para set exrc. Siento que todos complican demasiado esta pregunta mucho más que la respuesta obvia, que es esta. - subrayado_d

Complemento de tipo de archivo

Esto es lo que probablemente esté buscando, y es un enfoque muy bueno. Tendrás que configurar filetype plugin on en su vimrc para que esto funcione. A continuación, se debe crear un archivo en ~/.vim/ftplugin/<language>.vim que se cargará automáticamente para cualquier búfer que use ese idioma.

Por ejemplo, en lugar de escribir la configuración de JavaScript en ~/.vimrc_js, escríbenos a ~/.vim/ftplugin/javascript.vim.

autocmd

autocmd es la forma más sencilla de configurar algo en función de un idioma específico:

autocmd Filetype <language> <setting>

Esto va directamente a su vimrc y cargará la configuración solo para un tipo de archivo específico.

Para habilitar el corrector ortográfico en varios archivos de texto, por ejemplo, se podría usar:

autocmd FileType markdown,tex,textile setlocal spell

Puede establecer varias configuraciones a la vez separándolas con una tubería, que rápidamente se vuelven difíciles de manejar:

autocmd FileType php setlocal shiftwidth=4 tabstop=4|let php_sql_query=1

AutoCMD + Fuente

En raras ocasiones, es posible que tenga suficientes configuraciones para garantizar un archivo separado, pero le gustaría cargarlas para varios idiomas. Al usar complementos de tipo de archivo, terminará con archivos duplicados o enlaces simbólicos.

Una alternativa simple es recurrir a autocmd, pero en lugar de escribir la configuración en una línea grande, puede obtener un archivo. Por ejemplo:

autocmd FileType markdown,tex,textile source ~/.vim/lang_settings/text.vim

Respondido el 21 de Septiembre de 13 a las 15:09

Puedes probar el localvimrc enchufar. Intenta cargar .lvimrc en el directorio de su proyecto o en los directorios anteriores. Puede poner su configuración allí para cada proyecto.

respondido 12 nov., 13:06

¡Respuesta real a la pregunta! Hurra. - erik aronesty

Otra solución es EditorConfig. Establece estilos de codificación para diferentes proyectos o tipos de archivo. Funciona con Vim, pero es independiente del editor, por lo que puede usar el .editorconfig archivo con otros editores de texto (SublimeText2, Notepad++, Vim, Emacs, Textmate, Gedit) o ​​IDE (IDE basado en ideas, RubyMine, PHPStorm, Visual Studio).

Respondido el 22 de Septiembre de 13 a las 05:09

Aquí hay otra opción, similar a la primera sugerencia de @Ingo Karkat, excepto que le permite tener archivos vimrc separados para cada directorio de trabajo (que es una respuesta más cercana a la pregunta del OP). Es un poco más complicado que usar uno de los complementos disponibles, pero evita el problema de seguridad del complemento localvimrc y le permite almacenar todas sus variantes de vimrc en su directorio de inicio en lugar de estar dispersas en los diferentes directorios de trabajo (aunque funcionaría simplemente también si tu sí logró tenerlos en la raíz de cada uno de sus directorios de trabajo relevantes.

En .vimrc

if getcwd() =~ 'One Unique Target Directory'
  source ~/.one_unique_vimrc
elseif getcwd() =~ 'Another Unique Target Directory'
  source ~/.another_unique_vimrc
endif

El desafío es que debe apuntar un vimrc a una ruta única, por lo que esto no funcionaría tan bien con la siguiente estructura de directorios: si tiene un vimrc para Foo y otro para Baz, habría un comportamiento inconsistente ( "¿Por qué /Baz/Foo está usando mi /Foo vimrc?!")

/Foo
/Foo/Bar
/Foo/Bar/Baz
/Baz
/Baz/Quux
/Baz/Foo

Pero podría funcionar bien con una estructura de directorios más como esta

/Projects/My Greatest App/
/Projects/My Greatest App/src
/Projects/My Greatest App/bin
/Projects/unique.net/
/Projects/unique.net/index.html
/Projects/unique.net/.htaccess

Donde tiene un vimrc para su 'Mi mejor aplicación' y otro para su sitio web único

Respondido el 04 de junio de 15 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.