¿Es posible aplicar configuraciones de vim sin reiniciar?

80

Quiero editar el .vimrcarchivo de Vim y aplicarlo sin reiniciar Vim.

Santo
fuente

Respuestas:

80

Sí, solo use el :so %comando mientras edita su .vimrc.

Si desea que vim recargue automáticamente su configuración, debe agregar los siguientes comandos:

augroup myvimrchooks
    au!
    autocmd bufwritepost .vimrc source $MYVIMRC
augroup END

la agrupación de autocomando está aquí para evitar la recarga "exponencial" si guarda varias veces su configuración.

Supercopter Raoul
fuente
Tenga en cuenta que esto no funciona con gvimrco si se llama a su archivo _vimrco vimrc, o si edita un archivo llamado .vimrcen otro directorio. Vea mi respuesta para abordar estos problemas.
Tom Hale
Para mi falla con errores como Function Inc already exist, add ! to replace it.
Hi-Angel
¿Qué función cumple el grupo de expertos en este contexto? ¿No podría reescribirse esto de manera tan simple autocmd! bufwritepost .vimrc source ~/.vimrc? Incluso si el grupo es necesario por alguna razón, ¿no se podría omitir la línea 2 si la línea 3 se reescribe para empezar autocmd!?
John Karahalis
46

Aquí hay una versión compatible más multiplataforma si se ejecuta en Mac / Windows / Linux y gvimrc:

augroup myvimrc
    au!
    au BufWritePost .vimrc,_vimrc,vimrc,.gvimrc,_gvimrc,gvimrc so $MYVIMRC | if has('gui_running') | so $MYGVIMRC | endif
augroup END

El autocmd observa todos los *vimrcarchivos potenciales y cuando uno cambia, vuelve a cargar elvimrc archivo seguido de gvimrcsi la GUI se está ejecutando.

matpie
fuente
5
Se establece cuando se inicia GUI Vim. ver:help gvimrc
matpie
3
FANTÁSTICO, gracias. Si haces esto, evita el pedo cerebral que acabo de cometer ... Abrí gvim, agregué esto a mi vimrc y luego intenté confirmar que funcionaba. No ... 20 minutos más tarde me doy cuenta de que OLVIDÉ OBTENER EL ARCHIVO UNA VEZ DESPUÉS DE QUE SE AÑADÓ EL AUTOCMD. Una vez que hice eso, por supuesto, todo funcionó. Supongo que fue un poco demasiado meta para mí, y tuve un "desbordamiento de pila" mental.
Charlie Flowers
3
Usé esto, pero también verifiqué si $GVIMRCexiste, porque a veces no es así. if has('gui_running') && filereadable($MYGVIMRC)
k107
Lo único que me resultó extraño al principio es que simplemente recarga el archivo vimrc manteniendo las cosas que ya están configuradas. Por ejemplo, si tiene "set number" inicialmente en su vimrc, y luego comenta esa línea y guarda el documento, todavía tiene los números a la izquierda. Pero en realidad tiene sentido ... si desea deshabilitar algo, debe hacerlo manualmente.
piponazo
1
¿Alguna razón para no usar au BufWritePost $MYVIMRCo au BufWritePost $MYVIMRC,$MYGVIMRC?
phs
35

fuente su archivo vimrc :source ~/.vimrc

shingara
fuente
1
en Windows, solo: entonces ~ / _vimrc
Danniel Little
8
" Quickly edit/reload this configuration file
nnoremap gev :e $MYVIMRC<CR>
nnoremap gsv :so $MYVIMRC<CR>

Para recargar automáticamente al guardar, agregue lo siguiente a su $MYVIMRC:

if has ('autocmd') " Remain compatible with earlier versions
 augroup vimrc     " Source vim configuration upon save
    autocmd! BufWritePost $MYVIMRC source % | echom "Reloaded " . $MYVIMRC | redraw
    autocmd! BufWritePost $MYGVIMRC if has('gui_running') | so % | echom "Reloaded " . $MYGVIMRC | endif | redraw
  augroup END
endif " has autocmd

y luego, por última vez, escriba:

:so %

La próxima vez que guarde su vimrc, se recargará automáticamente.

caracteristicas:

  • Le dice al usuario lo que ha sucedido (también iniciando sesión :messages)
  • Maneja varios nombres para los archivos de configuración
  • Asegura que solo coincidirá con el archivo de configuración real (ignora copias en otros directorios o una fugitive://diferencia)
  • No generará un error si se usa vim-tiny

Por supuesto, la recarga automática solo ocurrirá si edita su vimrcarchivo in vim.

Tom Hale
fuente
Esto solo parece funcionar cuando todos los archivos están abiertos en la misma instancia vimen la que estoy editando $MYVIMRC. Si están en una terminal diferente, por ejemplo, todavía tengo que buscar manualmente $MYVIMRC. ¿Hay alguna forma de evitar esto?
Zoey Hewll
1
No que yo sepa, esto funciona detectando cuando la corriente vimescribe el archivo. Puede ser posible monitorear el mtime en el propio archivo, pero no está seguro de cómo hacerlo sin un sondeo asincrónico.
Tom Hale
1

autocmd! bufwritepost _vimrc fuente%

esto recargará automáticamente todas las configuraciones en el archivo _vimrc cuando guarde

James
fuente