Como ver quais plugins estão tornando o Vim lento?

318

Existe uma maneira de criar um perfil dos plugins do Vim?

Meu MacVim fica cada vez mais lento quando abro uma grande .py. Eu sei que poderia desmarcar todos os plugins e selecionar um por um para verificar qual plug-in é o culpado, mas existe uma maneira mais rápida?

Meu dotvim está aqui: https://github.com/charlax/dotvim

charlax
fonte
1
Na verdade, a inicialização está bem. O Vim fica lento após alguns minutos de uso. Diz respeito especialmente a .pyarquivos.
charlax
Pesquisa binária é o caminho a percorrer. Você fez sua pergunta duas horas atrás, a causa do seu problema teria sido encontrada nesse período. O autocmdpalpite de Ingo Karkat parece o mais plausível para mim.
Romainl 31/08/2012
Isso é verdade - mas você não acha que, se houver uma maneira de obter o mesmo resultado em até uma hora, é melhor? Além do mais, a inicialização é boa, é após alguns minutos de uso, por isso levaria muito tempo. autocmdparece legal. Apenas tentei, mas o Vim não está lento no momento.
charlax
1
Acabei de enfrentar o mesmo problema, mas em grandes arquivos ruby. Descobriu que folding=syntaxpode abrandar. Tentei com folding=manuale agora tudo funciona bem
Aleksandr K.

Respostas:

496

Você pode usar o suporte integrado à criação de perfil: após iniciar o vim do

:profile start profile.log
:profile func *
:profile file *
" At this point do slow actions
:profile pause
:noautocmd qall!

(diferente de desistir noautocmdnão é realmente necessário, apenas faz o vim sair mais rápido).

Nota: você não obterá informações sobre as funções excluídas antes de sair do vim.

ZyX
fonte
13
Isso é incrível. Pude ver que o EasyTags é o culpado. Muito obrigado!
charlax
5
isso me ajudou a detectar "vim-gitgutter" como o entupimento.
Sebastián Grignoli 10/03/2014
6
O @subjectego :set more | verbose function {function_name}mostra o conteúdo da função e onde ele está localizado.
ZyX 29/08/2015
26
Se não estiver claro, o resultado profile.logé um arquivo no diretório atual da sua sessão do Vim.
Micah Smith
7
Pule para o final de profile.logpara ver a lista de funções classificadas pelo tempo total ( profile.logpareceu-me inútil antes de eu encontrar uma lista classificada no final).
Andrey Portnoy
78

Encontrei outro método muito útil do vim buildin para mostrar exatamente as mensagens de tempo durante o carregamento do .vimrc.

vim --startuptime timeCost.txt timeCost.txt

Por favor, execute:

:help --startuptime

no VIM para obter mais informações.

feihu
fonte
3
Caso alguém mais esteja se perguntando, isso não existe em todas as distribuições vim / gvim. Não em um estoque Win Gvim 7.4 aqui (embora ele está documentado no viminfo)
thynctank
1
@thynctank Tentei no meu gvim 7.4 e funcionou. Aqui está a minha versãoIM - Vi IMproved 7.4 (2013 Aug 10, compiled Aug 10 2013 14:33:40)
feihu
Melhor resposta! Ajudou-me a identificar o plugin mais lento que me deixou com raiva a cada início do vim. Thanx :)
kovpack
Isso e o básico -Vmostraram que não era o local que $HOMEcausava o problema
bsb
Você precisa executar :epara atualizar o arquivo. Classifique o arquivo no lugar de acordo com o tempo total gasto para cada operação da seguinte maneira:%! sort -k2 -nr
Ashutosh Jindal
31

Pode ser um plugin ou o destaque da sintaxe; tente :syntax offquando isso acontecer e veja se o Vim fica instantaneamente mais rápido.

Nos plugins, uma "lentidão geral" geralmente vem de comandos automáticos; a :autocmdlista todos eles. Investigue matando alguns deles via :autocmd! [group] {event}. Prossiga de eventos mais frequentes (ou seja CursorMoved[I]) para eventos menos frequentes (por exemplo,BufWinEnter ) ).

Se você conseguir reproduzir de maneira confiável a lentidão, uma pesquisa binária poderá ajudar: Afaste metade dos arquivos ~/.vim/plugin/e repita o outro no conjunto que estava lento.

Se você realmente precisa olhar por baixo do capô, obtenha uma versão do Vim com o :profilecomando ativado. (Não é a versão baunilha do BIG Windows, mas a que acompanha o Cygwin possui; também, a compilação automática é bastante fácil na maioria das distros.)

Ingo Karkat
fonte
17

Eu achei útil imprimir todas as atividades do Vim em um arquivo iniciando o Vim com a -Vopção:

vim -V12log

Isso fornece a verbosidade máxima (nível 12) e a gera no arquivo log. Você pode executar algumas ações do Vim que você sabe serem lentas e depois ver quais funções / mapeamentos estão sendo chamados internamente.

Prince Goulash
fonte
10
mas não há tempo no log
Kokizzu 09/07/2013
7

Se você estiver tendo problemas com as operações de atualização da tela ( ^Lrolagem, etc), sendo lentas, seu problema pode ser um arquivo de destaque de sintaxe ineficiente. Você pode testar isso desativando temporariamente o realce da sintaxe ( :syn off) e verificando se o problema desaparece; se você quiser pesquisar os detalhes, pode criar um perfil do arquivo de sintaxe atual usando :syntime:

  1. Abra um arquivo que causa sintaxe, destacando problemas de desempenho.
  2. Execute :syntime onpara iniciar a criação de perfil.
  3. Role o arquivo um pouco.
  4. Execute :syntime reportpara gerar um relatório. Os padrões listados primeiro no relatório são os que levaram mais tempo para serem processados.
duskwuff -inactive-
fonte
2
Se parece que o arquivo de destaque da sintaxe é o culpado, qual é o próximo curso de ação?
Spectator6