Cómo cargar complementos condicionalmente

14

Estaba buscando una respuesta a esto, pero aún no he encontrado nada, así que si me perdí algo obvio, me disculpo. Pensé que sería una búsqueda rápida en Google, así que tal vez sea más complicado de lo que pensaba.

Me gustaría poder cargar complementos condicionalmente según el tipo de archivo que estoy editando. Por ejemplo, cuando edito python, no quiero las combinaciones de teclas que se vim-sexpinstalan, pero cuando trabajo en clojure, sí quiero que se cargue ese complemento.

Actualmente estoy usando neovim y patógeno, pero si hay un administrador de complementos diferente que lo haga por mí, estaría abierto a cambiar. Además, si esto existe, ¿ :set syntax whatevercambia los complementos? Porque eso sería super :)

Gracias de antemano por cualquier ayuda / dirección!

Aros
fuente
1
Está haciendo una pregunta, pero en realidad describe otra: si un complemento instala combinaciones de teclas globales, desactívelas (lea los documentos del complemento sobre cómo hacerlo) y vuelva a habilitarlas localmente (usando autocmds, por ejemplo) solo para los tipos de archivo que desear. Si el complemento está bien escrito, no gana demasiado retrasando su inicialización. Pero si no deshabilita las combinaciones de teclas globales no deseadas activadas por un complemento, aún lo afectarán después de que se cargue el complemento.
VanLaser

Respuestas:

8

En lugar de llamar execute pathogen#infect()para cargar todos los complementos, llame pathogen#interposea cada complemento, es decir:

execute pathogen#interpose('bundle/unicode.vim')
execute pathogen#interpose('bundle/AnsiEsc.vim')

La API de patógenos no está documentada fuera de la fuente , pero es bastante simple (aunque los nombres de las funciones son oscuros y no descriptivos). También puede usar pathogen#surround()para rutas absolutas.

Puede cargar complementos condicionalmente con un básico autocmd:

" Always use this plugin
execute pathogen#interpose('bundle/unicode.vim')

" Only for Python
autocmd FileType python execute pathogen#interpose('bundle/vim-sexp')

Si encuentra que tiene muchos de estos casos, incluso podría dividirlo en diferentes caminos:

  • ~/.vim/bundle/always para los complementos que siempre quieres
  • ~/.vim/bundle/<filetype> para complementos para un tipo de archivo específico
  • Y luego cárgalo así:

    " Always use this plugin
    execute pathogen#infect('bundle/always/{}')
    
    " Load filetype plugins if they exist
    autocmd FileType * if isdirectory('/home/martin/.vim/bundle/' . &ft) | execute pathogen#infect('bundle/' . &ft. '/{}') | endif
    

De esta manera, no tiene que agregar un montón de autocmds para cada tipo de archivo / complemento.

si esto existe, ¿ :set syntax whatevercambia los complementos? Porque eso sería super :)

  • Una vez que se carga un complemento, se carga. Un "plug-in" es simplemente una colección de function, commandy mapdefinitons. No conozco ninguna forma directa de "descargar" esto.

  • Se hace plugins de carga para un tipo de archivo si y sólo si se utiliza :set filetype; En general, siempre se desea utilizar :set filetypey no :set syntax , como syntaxsólo se configurará la resaltado de sintaxis, y no el sangrado y otros ajustes (por ejemplo iskeyword, formatexpr, etc.).

Martin Tournoij
fuente