Warum kann Vim eine 100 MB große Textdatei nicht öffnen, wenn ich 16 GB RAM habe?

Warum kann Vim eine 100 MB große Textdatei nicht öffnen, wenn ich 16 GB RAM habe?

Ich habe eine 100 MB große MySQL-Datenbank-Sicherungsdatei und habe Probleme, sie in Vim auf meiner Linux-Box mit 16 GB RAM zu öffnen.

Vim bleibt einfach hängen (oder ist zumindest unbrauchbar). Das verstehe ich nicht. Ich habe 16 GB RAM, warum kann ich eine 100 MB große Datei nicht in einen Editor laden?

Liegt es an Vim? Ich dachte, die gesamte Speicherverwaltung wird vom Betriebssystem übernommen.

Antwort1

Vim hat manchmal Probleme mit Dateien, die ungewöhnlich lange Zeilen haben. Da es sich um einen Texteditor handelt, ist er für Textdateien konzipiert, deren Zeilen normalerweise höchstens ein paar hundert Zeichen lang sind.

Eine Datenbankdatei enthält möglicherweise nicht viele Zeilenumbruchzeichen, es könnte sich also um eine einzige 100 MB lange Zeile handeln. Vim wird damit nicht zufrieden sein, und obwohl es wahrscheinlich funktioniert, kann das Laden der Datei ziemlich lange dauern.

Ich habe sicherlich geöffnetTextDateien, die mit Vim viel größer als 100 MB sind. Die Datei muss nicht einmal auf einmal in den Speicher passen (da Vim Änderungen nach Bedarf auf die Festplatte auslagern kann).

Antwort2

Meiner Erfahrung nach würgt Vim nicht angroße Dateien, aber auflange Linien. Verwenden Sie diesen Befehl, ummysqldumpverwendenkürzere Zeilenauf Kosten einesgrößere Datei:

$ mysqldump --complete-insert -u -p

Darüber hinaus können Sie Vim öffnen und es mit diesem Befehl anweisen, Ihre Datei nicht zu analysieren .vimrcoder Plugins nicht zu laden:

$ vim -u NONE output.sql

Wenn Vim auf diese Weise geladen wird, wird weniger Speicher verbraucht und Vim muss nicht die gesamte Datei analysieren, wie dies bei vielen Plug-ins der Fall ist.

Antwort3

"VIM ohne .vimrc und Plugins laden (sauberes VIM), zB für RIESIGE Dateien

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

Antwort4

Vim lädt die Datei nicht einfach so in den Speicher. Es konvertiert sie in interne Strukturen (Zeilen, Wörter usw.), führt eine Syntaxhervorhebung mithilfe einer internen Skriptsprache durch usw. All dies verbraucht Speicher (weit mehr als ein Byte pro Zeichen) und CPU-Zeit.

verwandte Informationen