Atraso no movimento do ponto Emacs (cursor)

12

Ao executar previous-line, C-pou <up>o cursor salta uma linha sem problemas ou atrasos. Ao correr next-line, C-nou <down>o cursor salta corretamente para baixo de uma linha, mas com um atraso significativo. Quando pressiono a tecla para baixo, nem consigo ver o ponto em movimento, ele aparece em algum lugar abaixo. Corri o profiler Emacs e parece que o culpado é cl-position. O que parece ser que previous-lineliteralmente apenas move o cursor, enquanto next-lineexecuta várias funções.

Saída do Profiler

Qual é o problema e como ele pode ser corrigido?

Damian Chrzanowski
fonte
Você está usando visual-line-mode? Você tem algumas linhas muito longas?
Drew
Não uso visual-line-modee não tenho longas filas.
Damian Chrzanowski

Respostas:

22

Eu encontrei uma resposta para a minha pergunta, restringindo a parte desobediente e pesquisando no Google. Eu consegui reduzir o atraso 10 vezes !!!! Quero dizer ... É insano quanto poder de computação next-lineestava usando para mover um cursor para baixo?!?!

O conserto:

Coloque este código no seu init.el: (setq auto-window-vscroll nil)

A prova:

Atraso reduzido significativamente

Agora next-linenão dispara, line-move-partialportanto, reduzindo o atraso. Não me lembro de configurar auto-window-vscrolla t. Não estava em nenhum lugar em nenhum dos meus .elarquivos, não sei ao certo como foi definido tpara começar. Portanto, se alguém tiver problemas de desempenho com o movimento do cursor, a correção acima reduzirá o atraso de cerca de 50% a 80% do tempo da CPU para 5% do tempo da CPU !!!

Para verificar rapidamente se você é afetado, basta executar C-h v auto-window-vscroll. Se estiver definido, tvocê pode estar tendo problemas importantes de desempenho. Verifique com o criador de perfil Emacs se o movimento do cursor realmente causa um atraso.

Boa sorte, companheiros amantes do Emacs !!!

Fonte de correção

Damian Chrzanowski
fonte
Por favor, considere a apresentação de um Emacs bug (ou solicitação de melhoria) para isso: M-x report-emacs-bug.
Desenhou
2
Fará, como eu posso ver isso sendo um problema para muitas pessoas.
Damian Chrzanowski
1
Obrigado, Damian, que melhora o desempenho, mas eu ainda sinto um pouco falta de resposta
Neeraj Verma
3

Não tenho certeza absoluta de qual é o problema, mas seu relatório do profiler parece indicar que o posn-at-point executa mais uma reexibição do que o esperado, o que, por sua vez, causa recomputação da linha de modo e que a linha de força deve fazer mais esforço para memorizar seu cálculo para a modelagem.

IOW, sugiro que M-x report-emacs-bugvocê também possa relatar um bug aos mantenedores da linha de energia.

Stefan
fonte
0

Parece que você está usando o powerline. Em particular, você exibe o nome do projeto de projétil em sua modelagem. Houve algumas melhorias no pacote de projéteis recentemente que mitigaram parte disso. Verifique se você está atualizado.

https://github.com/bbatsov/projectile/issues/1212

https://github.com/bbatsov/projectile/pull/1213

Também é possível memorizar funções que a modelo chama. Eu fiz muito isso na minha modelagem para torná-la muito rápida.

Aaron Jensen
fonte
O problema já foi resolvido, projéctil ou da linha eléctrica não eram o problema
Damian Chrzanowski
Estou feliz que você tenha resolvido. Seu perfil apontou para a desaceleração vinda do projétil. Pode ser que definir auto-window-vscroll como nulo apenas faça com que o emacs pule cálculos desnecessários da linha de modo. De qualquer forma, feliz que você tenha resolvido!
Aaron Jensen
Essa é uma boa opinião. Eu realmente não tive tempo para verificar qual pacote era o problema. Obrigado pelas sugestões!
Damian Chrzanowski