¿Cómo puedo determinar si un complemento de tipo de archivo (como vim-latexsuite
) se ha instalado y activado cuando abro el archivo apropiado? Otro editor popular indicaría que el "modo menor" relevante está activo. ¿Cuál es el equivalente vim?
¿Cómo puedo determinar si un complemento de tipo de archivo (como vim-latexsuite
) se ha instalado y activado cuando abro el archivo apropiado? Otro editor popular indicaría que el "modo menor" relevante está activo. ¿Cuál es el equivalente vim?
Respuestas:
¿Cómo puedo determinar si se ha instalado un complemento de tipo de archivo (como vim-latexsuite)
Puede usar :scriptnames
qué lista contiene todos los archivos de origen.
Otra opción es verificar la variable que indica si el complemento se cargó, tal como está recommended practice to allow the user to disable the loading of a given plugin.
. Por lo general, puede encontrar g:loaded_...
variables dentro de la <plugin_name>/plugin
carpeta. Para el complemento que mencionaste , podrías usarlo echo exists("loaded_libList")
.
y se activa cuando abro el archivo apropiado?
Si es un complemento de tipo de archivo, debe activarse automáticamente cuando 'filetype'
se establece la opción. Puede verificar si la opción es correcta para el búfer actual:
:set filetype?
Otro editor popular indicaría que el "modo menor" relevante está activo. ¿Cuál es el equivalente vim?
Puede personalizar su línea de estado para mostrar dicha indicación, ya sea utilizando complementos o directamente a través de las opciones, como se explica en :help 'statusline'
y en vi-improved.org .
Los complementos de Vim no vienen con ninguna indicación de activación, y en una configuración adecuada, esto no es necesario.
Puede verificar rápidamente si un complemento está activo consultando sus efectos secundarios, generalmente las asignaciones. Entonces, por ejemplo, sé que las asignaciones de NERDCommenter comienzan con <Leader>c
, por lo que sería una consulta para su activación :nmap <Leader>c
. Si se enumeran las asignaciones, el complemento está activo. Lo mismo se puede lograr para los comandos personalizados y :autocmd
en el grupo del complemento. La mayoría de los complementos también definen una variable de protección de inclusión g:loaded_pluginname
que se puede verificar.
Lo mismo se aplica a los complementos de tipo de archivo (y todos los efectos deberían tener un alcance de búfer). El factor más importante para determinar los complementos activos es la detección correcta del tipo de archivo. Puede consultar eso a través de :setlocal filetype?
, o incluso poner esto en su a 'statusline'
través de %y
/ %Y
item.
En ese caso particular, solo jugaría con :scriptnames
. No podemos esperar usar una variable global para verificar si se ha cargado un complemento ft : LaTeXSuite puede tener complementos, no recuerdo, lo que es seguro es que tiene muchos scripts de ftplugin. Muchos ftplugins usan b:did_ftplugin
(los que se envían con Vim al menos), pero este enfoque definitivamente no escala: en consecuencia, no todos los ftplugins usan esta variable sin sentido, y no podemos verificar un nombre de variable genérico para saber si un ftplugin dado tiene cargado, por ejemplo, solo para C tengo 22 ftplugins, definitivamente no están usando el mismo protector anti-reinclusión.
Por lo tanto :scriptname
. Por desgracia, :scriptname
da muchos resultados desordenados para nuestros ojos humanos. Afortunadamente execute()
(una función muy reciente), y filter()
vengan al rescate. En ese caso, buscaría scripts vim relacionados con látex con
:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"')
" or even "latex" instead of "tex"
Además, si está utilizando un administrador de complementos, es probable que el administrador de complementos esté utilizando la 'runtimepath'
opción. Puede mostrar su valor con :echo &rtp
. Incluso puede filtrar su valor con:
:echo filter(split(&rtp), ','), 'v:val =~? "tex")
(Esto le dirá si su administrador de complementos ha activado su complemento, LaTeX-suite en su caso. Esto no le dirá si los ftplugins relacionados se han cargado correctamente. :scriptname
Le dará esta información).
Una forma es hacer una búsqueda de expresiones regulares en runtimepath
:
if match(&runtimepath, 'MY-PLUGIN') != -1
" ...
endif
Si está utilizando vim-plug , aquí hay un método de propósito general para verificar:
function! PlugLoaded(name)
return (
\ has_key(g:plugs, a:name) &&
\ isdirectory(g:plugs[a:name].dir) &&
\ stridx(&rtp, g:plugs[a:name].dir) >= 0)
endfunction
Uso:
if PlugLoaded('MY-PLUGIN')
" ...
endif
Si usa vim-plug , establece una variable llamada plugs
que enumera todos sus complementos cargados y alguna información sobre ellos. Resolví tu pregunta por mí mismo cuando necesitaba verificar si estaba ejecutando YCM o coc.nvim. Puede ver si un complemento se carga ejecutando has_key(plugs, "name")
, por ejemplo:
if has_key(plugs, 'YouCompleteMe')
call YCM()
endif
if has_key(plugs, "coc.nvim")
call CocStart()
endif
Nota: esto solo se muestra si está actualmente incluido en su vimrc
, y no, por ejemplo, si lo tiene configurado para carga diferida, por lo que
Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
...
if has_key(plugs, 'nerdtree')
echo "HAS NERDTREE"
endif
seguirá imprimiéndolo al inicio, aunque nerdtree
aún no se haya cargado.