Por que o Vim não pode abrir um arquivo de texto de 100 MB quando eu tenho 16 GB de RAM?

65

Eu tenho um arquivo de backup de banco de dados MySQL de 100MB e tenho problemas para abri-lo no Vim na minha caixa Linux que tem 16G de RAM.

Vim apenas trava (pelo menos inutilizável). Isso é algo que não entendo. Tenho 16 GB de RAM, por que não consigo carregar um arquivo de 100 MB em um editor?

É por causa do Vim? Eu pensei que todo o gerenciamento de memória é tratado pelo sistema operacional.

    
por Ask and Learn 26.06.2014 / 03:35

8 respostas

69

O vim às vezes tem problemas com arquivos que possuem linhas muito longas. É um editor de texto, por isso é projetado para arquivos de texto, com comprimentos de linha que geralmente têm no máximo algumas centenas de caracteres.

Um arquivo de banco de dados pode não conter muitos caracteres de nova linha, de modo que poderia ser uma única linha longa de 100 Mb. O Vim não ficará satisfeito com isso e, embora provavelmente funcione, pode levar muito tempo para carregar o arquivo.

Eu certamente abri arquivos text muito maiores que 100 Mb com o Vim. O arquivo nem precisa caber na memória de uma só vez (já que o Vim pode trocar as alterações para o disco conforme necessário).

    
por 26.06.2014 / 04:13
55

Na minha experiência, o Vim não engasga com arquivos grandes , mas com linhas longas . Use este comando para mysqldump usar linhas mais curtas à custa de um arquivo maior :

$ mysqldump --complete-insert -u -p

Além disso, você pode abrir o Vim e pedir para não analisar seu arquivo .vimrc ou carregar plug-ins com este comando:

$ vim -u NONE output.sql

Carregar o Vim desta maneira usará menos memória e não exigirá que o Vim analise o arquivo inteiro como muitos plugins fazem.

    
por 26.06.2014 / 09:04
15

"carrega o VIM sem .vimrc e plugins (limpa o VIM), por exemplo, para arquivos HUGE

  gvim -u NONE -U NONE -N largefile.sql
    
por 26.06.2014 / 16:14
13

Tente usar less em vez de vim se quiser ver um arquivo grande diretamente. O Vim tenta fazer muitas coisas diferentes quando é carregado pela primeira vez - varrendo o arquivo (potencialmente em várias etapas) para tentar determinar qual sintaxe usar, e realçando a sintaxe, e procurando por modelines na parte superior e inferior do arquivo. Então, quando você edita o arquivo, o vim está salvando arquivos swap e mantendo árvores de desfazer (desfazer histórico no vim é ramificado, não linear como em todo editor (?)), E constantemente reavaliando a sintaxe destacando conforme o texto muda, etc.

Nada disso é necessariamente uma justificativa do motivo pelo qual ele deve ser tão inutilizável com arquivos gigantes, mas é mais uma explicação de algumas das razões pelas quais ele é.

    
por 26.06.2014 / 03:50
9

O Vim não apenas carrega o arquivo como está na memória. Ele converte em estruturas internas (linhas, palavras, etc), realiza realce de sintaxe usando uma linguagem de script interna e assim por diante; tudo o que consome memória (muito mais do que um byte para um personagem) e tempo de CPU.

    
por 26.06.2014 / 14:42
6

Você pode tentar carregá-lo como um binário. Eu tive sorte com isso para arquivos realmente grandes, sem texto

vim -b HUGEFILE

Também é possível que o IIRC use o vim como um editor hexadecimal, veja: link

    
por 26.06.2014 / 19:57
4

Espero que seu problema tenha mais a ver com os VIMs que precisam de arquivos temporários (como swap) mais do que a RAM.

Em muitos casos, os arquivos temporários criados pelo VIM estão no mesmo diretório do arquivo que você está abrindo. Se este for o seu caso, você pode verificar verificando o espaço em disco disponível no diretório atual.

Felizmente, há uma boa documentação sobre como você pode especificar um local diferente para os arquivos de indexação / troca do VIM:

Você também pode desativar o arquivo de troca

por 26.06.2014 / 04:01
1

Ocasionalmente, abro backups de banco de dados grandes no formato de texto .sql. Arquivos muito grandes, ou arquivos com linhas muito longas, muitas vezes parecem demorar muito para serem abertos no vim. Isso pode estar relacionado ao processamento de sintaxe e realce de cor, como mencionado nas respostas de @zzapper e @demonkoryu.

Uma solução rápida pode ser pressionar "control-G" durante o carregamento do arquivo para cancelar a sintaxe que destaca o pré-processamento.

    
por 27.06.2014 / 14:33

Tags