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 :scriptnames
qual 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>/plugin
pasta. 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 :autocmd
no grupo do plug-in. A maioria dos plugins também define uma variável de proteção de inclusão g:loaded_pluginname
que 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
/ %Y
item.
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 :scriptname
dá 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. :scriptname
Fornecerã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 plugs
que 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 vimrc
e 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 nerdtree
ainda não tenha sido carregado.