Não carregue o arquivo desfazer se for muito grande no Vim 7.3+

2
Copiei uma enorme quantidade de texto (na ordem de milhões de linhas, eu acho) em um registrador Vim, abri um novo arquivo, colei e então continuei a editar a nova cópia do trecho. O Vim foi razoavelmente rápido durante todo o processo; foi uma boa demonstração do poder do Vim.

... exceto que estou usando o recurso persistente de desfazer. Então, depois de um pouco de tempo gasto na edição, notei que minha sessão do Vim estava ocupando uma enorme quantidade de memória (cerca de 3 vezes mais do que a minha sessão do Chrome, que é muito pelos padrões Vim). No começo eu pensei que era porque minha cópia massiva ainda estava em um dos registradores, mas quando fui editar .viminfo , o maior valor de registro era de cerca de 20 linhas. Tentei reiniciar o Vim algumas vezes, mas cada vez que ele carregava esse arquivo em particular, ele ficava inativo por um tempo inaceitável (novamente, pelos padrões do Vim).

... Então percebi que precisava excluir meu arquivo de desfazer para o arquivo problemático. Isso resolveu meu problema imediato, mas gostaria de evitar encontrá-lo novamente. Então eu gostaria de um autocmd no meu VimRC que faça o seguinte:

  • Ao carregar um arquivo, verifique o tamanho do arquivo de desfazer correspondente (se existir)
  • Se o arquivo de desfazer for maior que x Mb (ou qualquer tamanho), siga um destes procedimentos:
    • Excluir
    • Mantendo apenas as alterações mais recentes, exclua as alterações até que o arquivo tenha um tamanho razoável (esse seria o comportamento preferido)

Alguma ideia de como fazer isso?

    
por Kyle Strand 11.04.2014 / 01:19

2 respostas

1

De undo-persistence :

The 'undofile' option is checked after writing a file, before the BufWritePost
autocommands.  If you want to control what files to write undo information
for, you can use a BufWritePre autocommand: >
    au BufWritePre /tmp/* setlocal noundofile

Eu sugeriria que você decida, antes de gravar o arquivo de desfazer, qual será o tamanho, e decida se deseja definir 'undofile' . É provavelmente mais fácil deixar o vim gravar o arquivo, em seguida, usar um BufWritePost autocommand para verificar o tamanho do arquivo recém-gravado e, se for muito grande, excluí-lo.

    
por 11.04.2014 / 04:49
2

O plug-in LargeFile - Editar arquivos grandes rapidamente detecta arquivos grandes e ajusta muitas opções para acomodar isso melhor. Ele também desativa 'undolevels' para evitar esse grande aumento na memória que você viu.

    
por 11.04.2014 / 11:06

Tags