Cómo ver si un complemento está activo

15

¿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?

SabreWolfy
fuente

Respuestas:

20

¿Cómo puedo determinar si se ha instalado un complemento de tipo de archivo (como vim-latexsuite)

Puede usar :scriptnamesqué 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>/plugincarpeta. 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 .

mMontu
fuente
6

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 :autocmden el grupo del complemento. La mayoría de los complementos también definen una variable de protección de inclusión g:loaded_pluginnameque 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/ %Yitem.

Ingo Karkat
fuente
6

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, :scriptnameda 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. :scriptnameLe dará esta información).

Luc Hermitte
fuente
3

Si activa los complementos de tipo de archivo mediante comandos automáticos, puede establecer el verbose = 9 para que Vim repita los comandos automáticos a medida que los ejecuta:

:set verbose=9
qingchen
fuente
3

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
Mateen Ulhaq
fuente
No es suficiente. Además, solo se ocupa de los complementos instalados con los administradores de complementos. En todos los casos, no se ocupa de los scripts de ftplugin enviados dentro de los complementos, que era la pregunta de OP.
Luc Hermitte
0

Si usa vim-plug , establece una variable llamada plugsque 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 nerdtreeaún no se haya cargado.

Max Coplan
fuente