Vim lento na renderização do buffer com realce de sintaxe do LaTeX

4

Depois de corrigir uma falha no disco rígido, estou instalando o GVIM no meu laptop Thinkpad X230T executando o Windows 10. As coisas estão funcionando bem, exceto pela velocidade de escoamento dos buffers para *.tex arquivos. O problema é: com syntax on , o buffer de latex é renderizado excepcionalmente lento. Aqui vai uma lista de "recursos":

  1. Leva segundos para atualizar um buffer de tamanho 1920 * 1080 (em pixels) quando eu pressiono <C-f> ;
  2. Se eu reduzir o tamanho do buffer, a renderização fica mais rápida. Ainda assim, experimentarei um segundo atraso no mínimo. Durante o atraso, só consigo ver um buffer em branco.
  3. As operações de texto também são lentas. Simplesmente iniciar uma nova linha abaixo pressionando o também terminará com um atraso de um segundo. Isto é em grande parte devido à renderização de todo o buffer depois de adicionar essa linha única: todas as linhas que se seguem devem ser atualizadas para sua "nova" posição.

Como exemplo de captura de tela:

Euapliqueitodasasopçõessugeridasmencionadasnestapostagem( link ), ainda assim, obtenho a mesma velocidade de renderização lenta.

Eu estava passando por essa lentidão excepcional no meu X230T. Com exatamente o mesmo _vimrc nas outras duas máquinas desktop, eu nem sequer experimento um pequeno atraso na velocidade de renderização. Nem experimentei o problema de renderização com a instalação anterior do Windows 7 e 8 no mesmo laptop X230T.

Por último, para disco rígido, estou tendo um SSD no meu X230T, que funcionou muito bem até agora; e eu tenho HDD em ambas as outras duas máquinas desktop.

Qualquer conselho seria muito útil!

Muito obrigado!

Tudo de bom,

-Linfeng

    
por llinfeng 08.08.2016 / 14:12

3 respostas

6

O problema é que o mecanismo de expressão regular do vim é muito lento, e eu acho que o latex é muito exigente no regex.

Consegui obter o vim um pouco mais rápido:

:syn clear texSectionFold
:syn clear texPreamble

Estas foram as principais expressões regulares do grupo de sintaxes ofensivas.

Eu os encontrei fazendo:

:syntime on

Agora pressione ctrl+L uma tonelada de vezes e espere o vim se atualizar. Então:

:syntime report

Isso deu a seguinte saída:

  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
  8.903872   1911   52      0.017387    0.004659  texSectionFold     \v%(%(\begin\{document\}.*$\n)@<=^|\section)
  4.979438   1859   0       0.016382    0.002679  texPreamble        \v%(\documentclass)@=
  0.634906   1976   182     0.010863    0.000321  texEnvName         \v%(\%(begin|end)\{)@<=\a+\*?\ze\}
  0.373173   1859   0       0.000880    0.000201  texArgsEnvNormReq  \v(\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\{
  0.317732   1859   0       0.000468    0.000171  texArgsEnvNormOpt  \v(\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\[
  0.223595   1859   0       0.000341    0.000120  texDimen           \v-?%(\.[0-9]+|([0-9]+(\.[0-9]+)?))%(pt|pc|bp|in|cm|mm|dd|cc|sp|ex|em)>
...

Então você pode ver que essas duas expressões regulares são muito mais caras que outras. Eu não uso dobras, então não tive problema em desabilitar isso. Não tenho certeza porque encontrar o preâmbulo é tão lento.

Talvez isso também ajude você, @llinfeng. Eu espero que sim!

EDITAR:

Para executar os comandos syn clear quando o vim iniciar, você precisará colocá-los em ~/.vim/after/syntax/tex.vim . Não funcionará em um arquivo ftplugin , pois as definições de sintaxe ainda não foram carregadas nesse ponto.

EDIT2:

Acontece que alguns dos grupos de sintaxe que eu postei acima vieram de um plugin. Desativar o plugin não ajuda, pois alguns outros grupos de sintaxe são lentos. Eesh!

Minha correção final, e tudo que eu peço a partir do destaque da sintaxe, é:

$ cat ~/.vim/after/syntax/tex.vim 
syn clear
syn match texComment   "%.*$"                                            
hi def link texComment  Comment

É muito rápido.

    
por 18.11.2016 / 19:25
1

Você usou vim -u NONE filename.tex ao abrir o arquivo para impedir que o .vimrc e outros scripts sejam carregados para a sessão, e isso resolveu o problema.

A conclusão é que algo iniciado pelo arquivo .vimrc causa a lentidão.

Tente excluir seletivamente partes do arquivo para descobrir exatamente qual é a causa. Lembre-se de fazer um backup.

    
por 02.11.2016 / 20:07
1

Solução parcial para o Thinkapd X230T per se

Identificação do problema

Como sugerido pelo @Edd, use :syntime on e syntime report para identificar o "grupo / região / correspondência" com maior destaque de sintaxe que consome tempo;

Solução parcial

Como pode ser encontrado no seguinte URL, eu carreguei o tex.vim no diretório after da minha distribuição do Vim ( c:\vim\vimfiles\after\syntax\ para o meu caso):

link

Resultado

Usando o mesmo arquivo LaTeX, meu desempenho aprimorado é o seguinte

Pergunta aberta --- como replicar o realce de sintaxe de forma eficiente

A coloração da sintaxe não é ideal, em comparação com o tex.vim nativo a ser encontrado como c:\vim\vim80\syntax\tex.vim .

    
por 05.02.2017 / 22:40