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 :cd
en 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
, .vimrc
o_exrc
Al inicio. Esto no se hace cada vez que se accede :cd
a 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 .vimrc
archivo específico de mi proyecto, una vez que estoy cd
en la carpeta del proyecto. Pasa esta función a tu ~/.vimrc
archivo 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
.