Hay un proyecto de programación en el que trabajo donde todos los demás usan un tamaño de tablatura de 4, por lo que me resulta más sencillo set tabstop=4
en mi ~/.vimrc
. Sin embargo, prefiero que esto no afecte a todos los archivos que edito, solo aquellos para este proyecto, digamos que todos los archivos en un determinado directorio (y sus subdirectorios).
¿Hay alguna manera de que pueda establecer fácilmente condicionalmente variables basadas en el prefijo de directorio del archivo?
Respuestas:
Configuración central
Si está bien configurar las excepciones locales de forma centralizada, puede poner tales autocmds en su
~/.vimrc
: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 modelines ), tiene las dos opciones siguientes:
Configuración local con funcionalidad incorporada
Si siempre inicia Vim desde el directorio raíz del proyecto, el incorporado
permite la lectura de un
.vimrc
archivo desde el directorio actual. Puede colocar los: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 de 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
.fuente
autocmd
método no funciona, asegúrese de no tener enlaces simbólicos en su ruta; tuve que poner la ruta completa sin enlaces simbólicos antes de que funcionara para mí (en OS X 10.9)Puede configurar vim para leer más comandos utilizando el
source
comando (so). Agregue esto a su~/.vimrc
: busca en el directorio actual y si no se encuentra el archivo .vimrc_proj allí, busca .vimrc_proj en el directorio principal.Luego agregue cualquier comando personalizado en los
.vimrc_proj
archivos de configuración para adaptarse a sus proyectos.fuente
Puede usar un complemento para Vim para resolver el problema de una manera más general al tratar de detectar la sangría.
El complemento de elección para mí es DetectIndent . Me llevó un tiempo probar todas las horquillas del complemento para encontrar uno que se adaptara a mis necesidades. El original estaba muy cerca, pero no del todo, así que hice mi propio tenedor .
Para la depuración es muy útil
:set verbose=1
volver a ejecutar el complemento con:DetectIndent
fuente
Una posible solución que aún no se mencionó es ir un nivel más arriba e implementar scripts de shell específicos del proyecto para iniciar su entorno vim.
Esto permite pasar configuraciones específicas de vim mediante la
-S
opción de línea de comandos. La ventaja es que también permite configurar otros aspectos del entorno, como la configuración del terminal o cscope.Por ejemplo, supongamos que tengo un proyecto de C ++ llamado
foo
, para el que quiero cargar la configuración de vim del archivo~/.vim/projects/foo.vim
. También quiero configurar un índice cscope e iniciar una ventana de terminal si se invoca el comando desde alguna herramienta de inicio rápido o acceso directo de escritorio. Para abrir mi entorno, tengo el siguiente script, llamadovim-foo
:fuente