web-dev-qa-db-fra.com

Comment éditer des fichiers texte de plusieurs gigaoctets? Vim ne fonctionne pas = (

Existe-t-il des éditeurs pouvant éditer des fichiers texte de plusieurs gigaoctets, peut-être en ne chargeant que de petites portions en mémoire à la fois? Il ne semble pas que Vim puisse le gérer = (

105
Philip Brocoum

Si vous êtes sur * nix (et en supposant que vous ne devez modifier que des parties de fichier (et rarement)), vous pouvez scinder les fichiers (à l'aide de la commande split), les éditer individuellement (à l'aide de awk, sed, ou quelque chose de similaire) et les concaténer après avoir terminé.

cat file2 file3 >> file1
68
Al pacino

Ctrl-C arrêtera le chargement du fichier. Si le fichier est suffisamment petit, vous avez peut-être eu la chance d’avoir chargé tout le contenu et simplement tué toutes les étapes postérieures au chargement. Vérifiez que le fichier entier a été chargé lors de l'utilisation de cette astuce.

Vim peut très bien gérer les gros fichiers. Je viens d'éditer un fichier de 3,4 Go, en supprimant des lignes, etc. Trois choses à garder à l'esprit:

  1. Appuyez sur Ctrl-C: Vim tente de lire l’ensemble du fichier dans un premier temps, pour effectuer des opérations telles que la coloration syntaxique et le nombre de lignes du fichier, etc. Ctrl-C annulera cette énumération (et la coloration syntaxique) et ne chargera que nécessaire pour afficher sur votre écran.
  2. Readonly: Vim commencera probablement en lecture seule lorsque le fichier est trop volumineux pour créer un fichier. copie du fichier pour effectuer les modifications. Je devais w! pour enregistrer le fichier, et c’est alors que cela a pris le plus de temps.
  3. Aller à la ligne: Taper :115355 vous mènera directement à la ligne 115355, ce qui est beaucoup plus rapide pour les fichiers volumineux. Vim semble commencer à analyser depuis le début chaque fois qu'il charge un tampon de lignes, et maintenir la touche Ctrl-F enfoncée pour parcourir le fichier semble devenir très lent vers la fin.

Remarque - Si votre instance de Vim est en lecture seule parce que vous avez appuyé sur Ctrl-C, il est possible que Vim n'ait pas chargé le fichier entier dans la mémoire tampon. Si cela se produit, enregistrez-le enregistrera uniquement le contenu du tampon, pas le fichier entier. Vous pouvez vérifier rapidement avec un G pour passer à la fin et vous assurer que toutes les lignes de votre fichier sont présentes.

142
Aaron R.

Il peut s'agir de plugins qui l'étouffent. (coloration syntaxique, plis, etc.)

Vous pouvez exécuter vim sans plugins.

vim -u "NONE" hugefile.log

Il est minimaliste mais il vous donnera au moins les mouvements vi auxquels vous êtes habitué.

syntax off

est une autre évidence. Élaguez votre installation et recherchez ce dont vous avez besoin. Vous saurez de quoi il est capable et si vous avez besoin d'accomplir une tâche par d'autres moyens.

70
michael

Une légère amélioration par rapport à la réponse donnée par @Al pachio avec la solution split + vim: vous pouvez lire les fichiers avec un glob, en utilisant efficacement les fragments de fichier comme tampon

$ split -l 5000 myBigFile
xaa
xab
xac
...

$ vim xa*
#edit the files

:nw  #skip forward and write
:n!  #skip forward and don't save 

:Nw  #skip back and write
:N!  #skip back and don't save
19
Amos Folarin

Vous voudrez peut-être vérifier ceci plugin VIM , ce qui désactive certaines fonctionnalités de vim afin de gagner du temps lors du chargement de gros fichiers.

14
RedBlueThing

J'ai essayé de le faire, principalement avec des fichiers d'environ 1 Go lorsque je devais apporter de petites modifications à un cliché SQL. Je suis sur Windows, ce qui en fait une douleur majeure. C'est sérieusement difficile.

La question évidente est "pourquoi avez-vous besoin de?" Je peux vous dire d’expérience qu’il faut essayer plus d’une fois, vous voulez probablement vraiment essayer de trouver un autre moyen.

Alors, comment fais-tu? Je l'ai fait de plusieurs manières. Parfois, je peux obtenir vim ou nano pour ouvrir le fichier et je peux les utiliser. C'est une douleur vraiment difficile, mais ça marche.

Lorsque cela ne fonctionne pas (comme dans votre cas), vous n'avez que quelques options. Vous pouvez écrire un petit programme pour effectuer les modifications dont vous avez besoin (par exemple, rechercher et remplacer). Vous pouvez utiliser un programme en ligne de commande capable de le faire (peut-être pourrait-il être réalisé avec sed/awk/grep/etc?)

Si cela ne fonctionne pas, vous pouvez toujours scinder le fichier en morceaux (quelque chose comme split étant le choix évident, mais vous pouvez utiliser head/tail pour obtenir la partie souhaitée), puis éditer la partie. qui en ont besoin et qui se recombinent plus tard.

Croyez-moi, essayez de trouver un autre moyen.

8
MBCook

Je pense qu'il est assez courant que les éditeurs hexagonaux gèrent de gros fichiers. Sous Windows, j'utilise HxD , qui prétend gérer des fichiers allant jusqu'à 8 EB (8 milliards de gigaoctets).

6
John Y

J'utilise vim 7.3.3 sur Win7 x64 avec le plugin LargeFile de Charles Campbell pour gérer des fichiers texte de plusieurs gigaoctets. Ça marche vraiment bien.

J'espère que tu vas bien.

4
AndrewJacksonZA

Wow, jamais réussi à faire étouffer vim, même avec un ou deux Go. J'ai entendu dire qu'UltraEdit (sous Windows) et BBEdit (sous Mac) conviennent encore mieux à des fichiers encore plus volumineux, mais je n'ai aucune expérience personnelle.

2
Alex Martelli

Dans le passé, j’ouvrais un fichier de 3 Go avec cet outil http://csved.sjfrancke.nl/

2
Zaffiro

Personnellement, j'aime bien ltraEdit . Voici leur petit spiel sur de gros fichiers .

2
JP Alioto

J'ai utilisé l'éditeur/visualiseur intégré de FAR Commander pour les fichiers journaux super volumineux.

2
azheglov

J'ai utilisé TextPad pour les fichiers journaux volumineux, il n'a pas de limite supérieure.

1
bstoney

La seule chose que j'ai pu utiliser pour quelque chose comme ça est mon éditeur hexadécimal Mac préféré, 0XED. Cependant, c’est avec des fichiers que j’ai considérés comme volumineux, avec des dizaines de mégaoctets. Je ne sais pas jusqu'où cela ira. Je suis sûr qu'il ne charge que des parties du fichier en mémoire à la fois, cependant.

1
AriX

Dans le passé, j’avais utilisé avec succès l’approche scindée/modifiée/jointe lorsque les fichiers étaient très volumineux. Pour que cela fonctionne, vous devez savoir où se trouve le texte à modifier, dans le fichier d'origine.

0
Cheeso