web-dev-qa-db-fra.com

Pourquoi Vim ne peut-il pas ouvrir un fichier texte de 100 Mo alors que j'ai 16 Go de RAM?

J'ai un fichier de sauvegarde de base de données MySQL de 100 Mo et j'ai du mal à l'ouvrir dans Vim sur ma boîte Linux qui a 16 Go de RAM.

Vim se bloque (au moins inutilisable). C'est quelque chose que je ne comprends pas. J'ai 16 Go de RAM, pourquoi ne puis-je pas charger un fichier de 100 Mo dans un éditeur?

Est-ce à cause de Vim? Je pensais que toute la gestion de la mémoire était gérée par le système d'exploitation.

67
Ask and Learn

Vim a parfois des problèmes avec les fichiers qui ont des lignes inhabituellement longues. Il s'agit d'un éditeur de texte, il est donc conçu pour les fichiers texte, avec des longueurs de ligne qui ne dépassent généralement pas quelques centaines de caractères.

Un fichier de base de données peut ne pas contenir de nombreux caractères de nouvelle ligne, il peut donc être concevable d'une seule ligne longue de 100 Mo. Vim ne sera pas satisfait de cela, et même si cela fonctionnera probablement, le chargement du fichier peut prendre un certain temps.

J'ai certainement ouvert texte fichiers beaucoup plus gros que 100 Mo avec Vim. Le fichier n'a même pas besoin de tenir en mémoire en une seule fois (puisque Vim peut permuter les modifications sur le disque si nécessaire).

69
Greg Hewgill

D'après mon expérience, Vim ne s'étouffe pas sur les gros fichiers , mais sur les longues lignes . Utilisez cette commande pour avoir mysqldump utilisez lignes plus courtes aux dépens d'un fichier plus grand:

$ mysqldump --complete-insert -u -p

De plus, vous pouvez ouvrir Vim et lui demander de ne pas analyser votre .vimrc fichier ou charger des plugins avec cette commande:

$ vim -u NONE output.sql

Le chargement de Vim de cette manière utilisera moins de mémoire et ne nécessitera pas que Vim analyse l'ensemble du fichier comme le font de nombreux plugins.

56
dotancohen

"charger VIM sans .vimrc et plugins (nettoyer VIM) par exemple pour les fichiers ÉNORMES

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

Essayez d'utiliser less au lieu de vim si vous souhaitez afficher un fichier volumineux directement. Vim essaie de faire beaucoup de choses différentes lors de son premier chargement - en analysant le fichier (potentiellement en plusieurs passes) pour essayer de déterminer la syntaxe à utiliser, en effectuant la mise en évidence de la syntaxe et en recherchant des modèles en haut et en bas du fichier. Ensuite, lorsque vous modifiez le fichier, vim enregistre les fichiers d'échange et conserve les arbres d'annulation (l'historique d'annulation dans vim est ramifié, pas linéaire comme dans tous les (?) Autres éditeurs), et réévalue constamment la coloration syntaxique à mesure que le texte change, etc.

Rien de tout cela ne justifie nécessairement pourquoi il doit être si inutilisable avec des fichiers géants, mais c'est plus une explication de certaines des raisons pour lesquelles il l'est.

13
godlygeek

Vim ne se contente pas de charger le fichier tel quel dans la mémoire. Il le convertit en structures internes (lignes, mots, etc.), effectue la coloration syntaxique à l'aide d'un langage de script interne, etc. tout cela consomme de la mémoire (beaucoup plus qu'un octet pour un caractère) et du temps CPU.

9
demonkoryu

Vous pouvez essayer de le charger en tant que binaire. J'ai eu de la chance avec ça pour de très gros fichiers non textuels

vim -b HUGEFILE

Il est également possible que l'IIRC utilise vim comme éditeur hexadécimal. Voir: http://usevim.com/2012/06/20/vim-binary-files/

7
Steve Butler

J'espère que votre problème est plus lié au besoin des VIM pour les fichiers temporaires (comme le swap) que pour la RAM.

Dans de nombreux cas, les fichiers temporaires créés par VIM se trouvent dans le même répertoire que le fichier que vous ouvrez. Si tel est le cas pour vous, vous pouvez le vérifier en vérifiant l'espace disque disponible dans le répertoire courant.

Heureusement, il existe une bonne documentation sur la façon de spécifier un emplacement différent pour les fichiers d'indexation/d'échange de VIM:

Vous pouvez également désactiver le fichier d'échange

4
samt

J'ouvre parfois de grandes sauvegardes de bases de données au format texte .sql. Les fichiers très volumineux ou les fichiers avec de très longues lignes semblent souvent prendre beaucoup de temps à s'ouvrir dans vim. Cela peut être lié au traitement de la syntaxe et à la mise en évidence des couleurs, comme mentionné dans les réponses de @zzapper et @demonkoryu.

Une solution rapide pourrait être d'appuyer sur "control-G" pendant le chargement du fichier pour annuler la syntaxe mettant en évidence le prétraitement.

1
digitalsean