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

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

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

O Vim simplesmente 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? Achei que todo o gerenciamento de memória fosse feito pelo sistema operacional.

Responder1

Às vezes, o Vim tem problemas com arquivos que possuem linhas excepcionalmente longas. É um editor de texto, portanto, foi projetado para arquivos de texto, com comprimentos de linha que geralmente têm no máximo algumas centenas de caracteres de largura.

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

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

Responder2

Na minha experiência, o Vim não engasgaarquivos grandes, mas emlongas filas. Use este comando para termysqldumpusarlinhas mais curtasàs custas de umarquivo maior:

$ mysqldump --complete-insert -u -p

Além disso, você pode abrir o Vim e pedir para ele não analisar seu .vimrcarquivo ou carregar nenhum plugin com este comando:

$ vim -u NONE output.sql

Carregar o Vim dessa maneira usará menos memória e não exigirá que o Vim analise o arquivo inteiro como muitos plug-ins fazem.

Responder3

"carregue o VIM sem .vimrc e plugins (limpe o VIM), por exemplo, para arquivos ENORMES

  gvim -u NONE -U NONE -N largefile.sql

Responder4

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

informação relacionada