¿Cómo consigo que Vim cargue automáticamente la configuración .vimrc desde el directorio actual?

¿Cómo consigo que Vim cargue automáticamente la configuración .vimrc desde el directorio actual?

Tengo algunos proyectos que necesitan diferentes comandos para ejecutar, compilar y probar, por lo que puse un archivo .vimrc en cada uno de los directorios del proyecto que definen asignaciones a algunos botones F. En los archivos de ayuda de vim dice:

'exrc' 'ex' booleano (desactivado por defecto)
                        global
                        {no en Vi}
        Habilita la lectura de .vimrc, .exrc y .gvimrc en el archivo actual
        directorio.

Tengo esa opción habilitada, pero cuando entro :cden un directorio, el archivo .vimrc no se carga. Si escribo :so .\.vimrc, se carga bien. ¿Por qué no se carga automáticamente?


Estoy usando gVim 7.3 x64 para Windows.

Respuesta1

Si se establece 'exrc', se busca en el directorio actual un archivo llamado _vimrc, .vimrco_exrc Al inicio. Esto no se hace cada vez que se accede :cda un nuevo directorio. Ver

:help .vimrc

Respuesta2

En mi opinión esta es la mejor variante:

if getcwd() =~ '^\(/my/safe/dir1/\|/my/safe/dir2/\)'
  set secure exrc
endif

Fuente de:http://vim.wikia.com/wiki/Open_vimrc_file pero sintaxis fija

Respuesta3

En vim versión 8.1^ hay un evento autocmd llamadoDirCambiadoque puede utilizar para evaluar su proyecto específico .vimrc. Aquí hay más detalles sobre cuándo se activa este evento:

DirChanged = Working directory has changed in response to the |:cd| or |:lcd| commands.

Ejemplo de trabajo

No soy un experto en vim-script, pero creé la siguiente función que carga el .vimrcarchivo específico de mi proyecto, una vez que estoy cden la carpeta del proyecto. Pasa esta función a tu ~/.vimrcarchivo principal.

if !exists("*LoadProjectVimrc")
  function! LoadProjectVimrc()
    let vimrcFile = findfile(".vimrc", ".;")

    if !empty(vimrcFile)
      execute ":so" l:vimrcFile
      echom l:vimrcFile
    endif

  endfunction
endif
autocmd DirChanged * :call LoadProjectVimrc()

Respuesta4

Solo para que conste, lo que terminé haciendo fue crear un acceso directo para cada uno de mis proyectos y cargar un archivo de configuración específico del proyecto como un archivo de sesión usando -S session.vim.

información relacionada