Como ver se um plug-in está ativo


15

Como posso determinar se um plug-in de tipo de arquivo (como vim-latexsuite) foi instalado e ativado quando abro o arquivo apropriado? Outro editor popular indicaria que o "modo secundário" relevante está ativo. Qual é o equivalente do vim?

Respostas:


20

Como determinar se um plug-in de tipo de arquivo (como o vim-latexsuite) foi instalado

Você pode usar :scriptnamesqual lista todos os arquivos de origem.

Outra opção é verificar a variável indicando se o plug-in foi carregado, como está recommended practice to allow the user to disable the loading of a given plugin.. Você geralmente pode encontrar g:loaded_...variáveis ​​dentro da <plugin_name>/pluginpasta. Para o plugin que você mencionou, você poderia usar echo exists("loaded_libList").

e ativado quando abro o arquivo apropriado?

Se for um plug-in de tipo de arquivo, ele deverá ser ativado automaticamente quando a 'filetype'opção estiver definida. Você pode verificar se a opção está correta para o buffer atual:

:set filetype?

Outro editor popular indicaria que o "modo secundário" relevante está ativo. Qual é o equivalente do vim?

Você pode personalizar sua linha de status para mostrar essa indicação, usando plug-ins ou diretamente através de opções, conforme explicado em :help 'statusline'e em vi-improved.org .


6

Os plugins do Vim não vêm com nenhuma indicação de ativação e, em uma configuração adequada, isso não é necessário.

Você pode verificar rapidamente se um plug-in está ativo consultando seus efeitos colaterais, geralmente mapeamentos. Por exemplo, eu sei que os mapeamentos do NERDCommenter começam com <Leader>c, portanto, uma consulta para sua ativação seria :nmap <Leader>c. Se os mapeamentos estiverem listados, o plug-in estará ativo. O mesmo pode ser alcançado para comandos personalizados e :autocmdno grupo do plug-in. A maioria dos plugins também define uma variável de proteção de inclusão g:loaded_pluginnameque pode ser verificada.

O mesmo se aplica aos plugins de tipo de arquivo (e os efeitos devem ser todos com escopo no buffer). O fator mais importante na determinação dos plugins ativos é a detecção correta do tipo de arquivo. Você pode consultar essa via :setlocal filetype?, ou mesmo colocar isso em sua 'statusline'via %y/ %Yitem.


6

Nesse caso em particular, eu só brincava :scriptnames. Não podemos esperar usar uma variável global para verificar se um plug-in ft foi carregado - o LaTeXSuite pode ter plug-ins, não me lembro, o que é certo é que há muitos scripts ftplugin. Muitos ftplugins usam b:did_ftplugin(os que são fornecidos com o Vim pelo menos), mas essa abordagem definitivamente não é escalável: em conseqüência, nem todos os ftplugins usam essa variável sem sentido e não podemos verificar um nome genérico de variável para saber se um determinado ftplugin possui foi carregado - por exemplo, para C sozinho, eu tenho 22 ftplugins, eles definitivamente não estão usando o mesmo protetor anti-reinclusão.

Então :scriptname. Alas :scriptnamedá muitos resultados desordenados, para nossos olhos humanos. Felizmente execute()(uma função muito recente), e filter()venha para o resgate. Nesse caso, eu procuraria por scripts vim relacionados ao látex com

:echo filter(split(execute(':scriptname'), "\n"), 'v:val =~? "tex"') 
" or even "latex" instead of "tex"

Além disso, se você estiver usando um gerenciador de plugins, é provável que ele esteja usando a 'runtimepath'opção Você pode exibir seu valor com :echo &rtp. Você pode até filtrar seu valor com:

:echo filter(split(&rtp), ','), 'v:val =~? "tex")

(Isso informará se o seu gerenciador de plugins ativou o seu plugin, o LaTeX-suite no seu caso. Isso não informará se os plugins de ftp relacionados foram carregados corretamente. :scriptnameFornecerão essas informações.)


3

Se você ativar plugins de tipo de arquivo por comandos automáticos, poderá definir o detalhado = 9 para que o Vim faça eco dos comandos automáticos conforme os executa:

:set verbose=9

3

Uma maneira é fazer uma pesquisa regex em runtimepath:

if match(&runtimepath, 'MY-PLUGIN') != -1
    " ...
endif

Se você estiver usando o vim-plug , aqui está um método de uso geral 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

Não é o suficiente. Além disso, ele cuida apenas de plugins instalados com gerenciadores de plugins. Em todos os casos, ele não cuida dos scripts ftplugin enviados nos plugins, que era a pergunta do OP.
precisa

0

Se você usa o vim-plug , ele define uma variável chamada plugsque lista todos os plugins carregados e algumas informações sobre eles. Resolvi sua pergunta quando precisei verificar se estava executando o YCM ou o coc.nvim. Você pode ver se um plug-in é carregado executando has_key(plugs, "name"), por exemplo:

if has_key(plugs, 'YouCompleteMe')
        call YCM()
endif
if has_key(plugs, "coc.nvim")
        call CocStart()
endif

Nota: isso mostra apenas se ele está atualmente listado no seu vimrce não, por exemplo, se você o configurou para carregamento lento, portanto

    Plug 'scrooloose/nerdtree', {'on': 'NERDTreeToggle'}
    ...
if has_key(plugs, 'nerdtree')
        echo "HAS NERDTREE"
endif

ainda imprimirá isso na inicialização, mesmo que nerdtreeainda não tenha sido carregado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.