En mi .vimrc
, estoy tratando de usar ftplugin
y obviamente uso algunos comandos relacionados con eso bajo el supuesto de que se cargó correctamente. Sin embargo, ahora me he encontrado con algunas máquinas antiguas que no tienen el complemento instalado. ¿Puedo hacer que la carga de este complemento sea condicional y agregar filetype on
directivas similares en el mismo bloque condicional?
He visto que existen condiciones para los esquemas de color y la versión de Vim, pero no he visto un ejemplo que verifique el complemento (o no lo reconozca).
NB: Sé gentil, soy un principiante de VimScript.
~/.vimrc
, por lo que no podrá probar los efectos de un complemento dentro de su a~/.vimrc
menos que pruebe la existencia del archivo de complemento o difiera la prueba hasta que los complementos se hayan cargado con un comando automático como VimEnter.Respuestas:
Puede ajustar ese bloque en un condicional que utiliza la
exists()
función para verificar si vim conoce una variable, comando o función definida por el complemento.Aquí hay un par de bits que tengo en los archivos bajo ~ / .vim:
Tenga en cuenta que los bits anteriores están en archivos que se evalúan después de los complementos normales, aquí un ftplugin y un archivo en el
after/plugin
directorio.Otra opción sería usar bloques try / catch, aunque esto requiere al menos vim 7.0:
Una vez que algo en la
try
sección de ese bloque falla, saltará a lacatch
sección. Como lacatch
sección está vacía, continuará con el resto del archivo de inicialización después de laendtry
declaración.Dado que esto es cargar manualmente el código en lugar de depender de que un complemento ya esté cargado, esto se puede hacer en el archivo .vimrc.
fuente
try
construcción? ¿Lo entendería el viejo Vim? Es decir, cuándo fue presentado. Gracias y +1 por ahora.try
debería funcionar. Muchas gracias. Veamos si aún llegará otra respuesta. De lo contrario, por supuesto, aceptaré el tuyo.:silent! {cmd}
, que suprime el error cuando{cmd}
no existe. Esto incluso funciona en Vim 6.Mi método preferido es simplemente verificar la existencia del archivo de complemento. Esto me parece más simple.
fuente
Quería lograr esto mientras mantenía mi configuración de Vim dentro
.vimrc
, en lugar de en un montón deafter/
directorios. Esta es la solución que se me ocurrió:Verifique la existencia de cada complemento verificando cualquier comando único que proporcione
exists()
y configure sus opciones si es que existe. (Esto es como en la respuesta aceptada).Ponga todas las opciones establecidas de la manera anterior dentro de una función (llamada
SetPluginOptionsNow()
en mi código).Llame a esta función en el
VimEnter
evento, que se activa al ingresar a una nueva sesión de Vim, pero de manera crucial, después de que todos los complementos se hayan cargado. Debido a este hecho, nuestrasexists()
comprobaciones pueden verificar las funciones del complemento sin ningún problema.Aquí hay una muestra de esa parte de mi
.vimrc
.fuente
airline_theme
parece inducir un montón de errores ... No estoy realmente seguro de por qué.Se está utilizando otra alternativa
:silent! {cmd}
, que suprime el error cuando{cmd}
no existe. El principal beneficio es que es un comando único corto. Esto incluso funciona en Vim 6, y es ideal para cosas opcionales.Por ejemplo, es utilizado por complementos que usan el archivo repeat.vim de Tim Pope para hacer que las asignaciones sean repetibles.
fuente
!silent runtime ftplugin/man.vim | filetype on | filetype plugin on | filetype indent on
trabajar para callar todos los comandos que siguen al!silent
o es siempre específico para el siguiente comando?:silent!
, no!silent
, y se aplica a todos los comandos contenidos, excepto cuando:unsilent
se usa en algún lugar dentro. (Pero eso es raro.)Inicialmente publicado en otra pregunta: /programming//a/48178537/2843583
Como alternativa, también puede usar una expresión regular para decidir si el complemento en cuestión está en su
runtimepath
:Esto tiene la ventaja de que funciona con complementos que solo tienen código vimscript en el
autoload
directorio, que a su vez no se puede detectar cuando .vimrc se analiza inicialmente ya que los fragmentos de carga automática se cargan en el momento de una llamada de función.fuente