Vários pacotes de cursores fazem o emacs rodar devagar


9

Estou usando o pacote Multiple Cursors em um arquivo html e é incrível para alguns cursores, mas se eu criar mais de 30 ou 50 cursores, fica muito lento e leva cerca de cinco ou seis segundos apenas para mover os cursores.
Estou usando errado ou apenas porque não está preparado para criar tantos cursores?


2
Depende do que está acontecendo no buffer - alguns buffers são apenas mais difíceis para os cursores múltiplos da Magnar. Às vezes, posso ter algumas centenas sem uma desaceleração significativa e outras, algumas (digamos wdired-mode), causam desaceleração. Há uma solicitação de recurso aberto - debbugs.gnu.org/cgi/bugreport.cgi?bug=22873 - para mover vários recursos do cursor para o código fonte C, mas ainda é uma discussão em andamento no momento. Um dos meus pontos de venda propostos para a equipe de desenvolvimento do Emacs era um aumento potencial de velocidade se fosse inserido na base de código C.
— lawlist

3
Não tenho uma solução, mas queria confirmar a mesma lentidão para mim também. Eu não ficaria surpreso se o problema fosse relacionado a problemas de bloqueio de fonte. Quando desativo o bloqueio de fonte globalmente, os cursores ficam instáveis ​​novamente.
— Emacs usuário

11
... nesse caso, vários cursores não causariam as lentidões diretamente (mesmo que a lentidão se mostre um fator quando você a estiver usando). Eu faria M-x profiler-starte faria um monte de coisas lentas e depois M-x profiler-reportcontinuaria pesquisando os itens, ocupando a maior parte do tempo da CPU até que você possa isolá-lo em alguma biblioteca específica (se houver); tente desativar essa biblioteca. Não se esqueça de interromper o criador de perfil quando terminar.
— phils

Respostas:


5

Uma lista de modos secundários que não funcionam bem com o modo de cursores múltiplos pode ser definida via mc/unsupported-minor-modes. Todos os modos adicionados a esta lista serão desativados ao entrar no modo de múltiplos cursores; eles serão reativados assim que você sair do modo de múltiplos cursores.

Você pode adicionar um item a esta lista assim

(add-to-list 'mc/unsupported-minor-modes 'flyspell-mode)

Isso faz uma grande diferença na capacidade de resposta do modo de múltiplos cursores. Eu descobri que os dois modos menores que tiveram o maior impacto foram o modo linum e o flyspell.


Se alguém puder tentar explicar por que o flyspell torna as coisas mais lentas (ou fornecer uma receita concisa para reproduzir a lentidão com o flyspell), talvez possamos tentar resolver o problema.
— 21417 Stefan

11
Tentei traçar o perfil da lentidão, mas não consegui encontrar nenhum padrão consistente. Dito isto, a lentidão introduzida pelo flyspell não é tão ruim, o módulo que acho muito pior é o modo linum. Desligar o modo de linum me permitiu ir de 30 cursores de cada vez para mais de 600.
— Charles Ritchie

Uma receita reproduzível ajudaria muito.
— Stefan

11
Obrigado pela ajuda!. parece que esse era o problema. Modo de recuo-guia e modo Linum, onde os que tenho que desabilitar (desabilitei o recuo-guia e substituí Linum por nlinum). Agora eu sou capaz de ter centenas de cursores sem nenhum atraso.
— Fabman

0

... mais de 30 ou 50 cursores, fica terrivelmente lento ....

Aqui está uma solução temporária: ajuste essa variável

mc/max-cursors

para um valor menor que 30 como solução alternativa. O padrão é nulo, o que significa sem limite. O número real para restaurar a velocidade depende do tipo de buffer, das fontes usadas e de qualquer outra coisa em execução no momento. De qualquer forma, o problema que você está tendo foi amplamente divulgado.

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.