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?
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:
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 .
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.
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.)
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
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.