Esta podría ser una pregunta tonta, pero tengan paciencia conmigo.
Estoy automatizando algunas de las cosas habituales que hago cuando configuro un nuevo entorno de trabajo, y me gustaría automatizar el comando Vim :BundleInstall
(para instalar todos mis complementos Vim).
¿Es posible ejecutar esto desde el shell?
Alternativamente, ¿es posible hacer que el script ejecute Vim, ejecute :BundleInstall
, espere hasta que termine y salga?
Gracias.
vim +BundleInstall +qall!
.Puede ejecutar su comando de esta manera:
lo que evitará abrir una ventana Vim en su terminal.
Nota: Mi primera respuesta incluyó la
-s
opción que necesitaba para otra aplicación, pero fue incorrecta aquí porque evitó gran parte de la inicialización de Vim, incluido el suministro del complemento que definió elBundleInstall
comando.fuente
-s
hace más que inhibir ciertos mensajes, también inhibe las inicializaciones, por lo que no se obtuvo la definición de BundleInstall. Una forma de arreglar eso sería añadir una opción como esta antes de la primera-c
:--cmd 'runtime plugin/bundle.vim'
. Edite ese nombre de archivo para adaptarlo. Ver:help -s-ex
.Si bien la receta específica de vim anterior es la forma correcta de hacerlo, siempre puede usar un enfoque más general como autoexpect .
fuente
Para situaciones en las que necesita que vim se haya cargado completamente como si lo hubiera iniciado manualmente, esto funciona:
Por ejemplo, quería redirigir la salida
:map
a un archivo desde el shell, pero quería capturar el mapeo que vim-airline crea solo después de que se muestre su tabulación (la línea en la parte superior muestra todos los nombres de búfer abiertos). esto de forma asíncrona, simplemente ejecutar una-c
redirección a un archivo no le daba tiempo para hacer las asignaciones. Podría haber una mejor manera, pero esto funciona para mí, especialmente porque ya loupdatetime
configuré en100
(0.1 segundos), lo que afecta el tiempo hastaCursorHold
que se dispara el evento. Por defecto, vim lo establece en 4 segundos.fuente