Comment ouvrir de très gros fichiers avec de bonnes performances?

27

J'ai des fichiers journaux de serveur de plusieurs gigaoctets (sur Ubuntu). Lorsque j'essaie de les ouvrir, le terminal se bloque pendant environ une minute pendant que le fichier est chargé dans Vim. Existe-t-il un moyen de réduire ce temps, par exemple en configurant Vim pour charger le fichier à la demande, ou par une autre méthode?

peter-b
la source
4
Pourquoi ne pas utiliser less?
Bernhard
1
Avez-vous l'intention de manipuler les fichiers de quelque manière que ce soit, ou souhaitez-vous simplement les afficher?
200_success
1
Je souhaite éditer les fichiers.
peter-b
en relation: stackoverflow.com/a/19795855/732016
wchargin
Très probablement, je serai banni du site pour toujours, mais je dois le dire: quand il s'agit de travailler avec des fichiers énormes, Emacs est l'outil pour le travail. :-)
toro2k

Réponses:

25

Tout d'abord, essayez de charger vim sans plugins ni vimrc:

vim -u NONE gargantuan.txt

Si cela est considérablement plus rapide, vous avez probablement une mise en évidence de la syntaxe, un pliage, des plugins ou autre chose qui prend la plupart du temps. Essayez de désactiver des éléments dans votre vimrc (et de désactiver vos plugins) jusqu'à ce que vous trouviez le coupable.

Assurez-vous également de set ft= syn=et syntax off.

Si cela ne vous aide pas, il est probable que vous ayez de très longues lignes qui causent le problème. Essayez set nowrapde désactiver le retour à la ligne.

wchargin
la source
1
vim -U NONE -N gargantuan.txtfera la même chose lors de l'exécution de vim dans nocompatiblelequel s'exécute en mode "vi iMproved" au lieu d'essayer d'être compatible avec l'ancien "vi"
ecerulm
15

Vim n'est pas le bon outil pour le travail: vous devez utiliser un téléavertisseur comme moreou less.

Si vous insistez pour utiliser un éditeur, essayez cet exemple adapté du wiki Vim :

augroup LargeFile
        let g:large_file = 10485760 " 10MB

        " Set options:
        "   eventignore+=FileType (no syntax highlighting etc
        "   assumes FileType always on)
        "   noswapfile (save copy of file)
        "   bufhidden=unload (save memory when other file is viewed)
        "   buftype=nowritefile (is read-only)
        "   undolevels=-1 (no undo possible)
        au BufReadPre *
                \ let f=expand("<afile>") |
                \ if getfsize(f) > g:large_file |
                        \ set eventignore+=FileType |
                        \ setlocal noswapfile bufhidden=unload buftype=nowrite undolevels=-1 |
                \ else |
                        \ set eventignore-=FileType |
                \ endif
augroup END
romainl
la source
Peut-on lessou moreaussi apporter des modifications à mon dossier?
Martin Tournoij
3
Ils ne peuvent pas, bien sûr. Les journaux ne sont pas destinés à être modifiés.
romainl
5
sed a été inventé à cet effet. Vous déterminez les modifications que vous souhaitez apporter, exprimées en substitutions, puis exécutez sedpour les effectuer. Cela fonctionne également sur les flux (c'est-à-dire le contenu de fichier qui n'a pas de fin car il est en cours de production).
reinierpost
J'aliasé less, moreet manà vimpager. github.com/rkitover/vimpager
Alex Kroll
5

Le plugin LargeFile.vim est conçu pour accélérer l'édition de gros fichiers. Voir http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Depuis la page:

Permet une édition beaucoup plus rapide des fichiers volumineux (par défaut: 100 Mo + sont "grands"), au prix de la désactivation des événements, de l'annulation, de la coloration syntaxique, etc. Également disponible sur vim.sf.net où vous pouvez le classer.

Selon le manuel, le plugin fonctionne simplement en le faisant installer. Vous pouvez définir la coupure en changeant g:LargeFile, en un nombre entier de Mo, ce qui, par défaut, est de 20 Mo (contrairement à la description du projet qui dit 100)

Le greffon fournit également des commandes :UnLarge, :Largeet :Large!à désactiver, réactiver ou la force de validation (pour les petits fichiers) , respectivement sur le fichier actuellement chargé.

user21497
la source
2

J'ai entendu dire que la désactivation de la mise en évidence de la syntaxe peut aider:

:syntax off
Reaver
la source
L'activation de tout type de pliage a également un effet énorme
craigp
0

Un autre téléavertisseur que vous aimeriez essayer est most: http://www.jedsoft.org/most/

Faites également pivoter vos journaux et cela peut contribuer à des journaux moins volumineux.

Utilisateur enregistré
la source