Que se passe-t-il si j'utilise vi sur des fichiers volumineux?

16

Bien que nous ayons reçu l'ordre de ne pas le faire, un de mes collègues a utilisé vi pour afficher un gros fichier texte (server.log 3,5 Go). Cela a rempli / var / tmp et a causé des problèmes sur le serveur.

Qu'est-ce qui a causé ça? Pourquoi ne devrions-nous pas utiliser vi pour les gros fichiers?

atripathi
la source
3
vi(ou vimd'ailleurs) est sacrément lent sur les gros fichiers et peut même être inutilisable s'il n'y a pas beaucoup de fins de ligne. De plus, le fichier doit tenir dans la mémoire. Utilisé lesspour les fichiers volumineux, il est beaucoup plus rapide et souvent suffisant pour lire / regarder les fichiers journaux.
Marco
@Marco Pourquoi ne pas le mettre comme réponse?
Bernhard
1
car ce n'est pas la réponse à la question, mais un commentaire, la question est "Qu'est-ce qui a causé cela? Pourquoi ne devrions-nous pas utiliser vi pour les gros fichiers?"
Kiwy
regardez le commentaire avec ma réponse.
rɑːdʒɑ

Réponses:

7

Le répertoire par défaut (/ var / tmp) du tampon d'édition de vi a besoin d'un espace égal à environ deux fois la taille du fichier avec lequel vous travaillez, car vi utilise les lignes supplémentaires pour la manipulation du tampon.

Si le répertoire / var / tmp n'a pas assez d'espace pour le tampon d'édition (par exemple, vous travaillez avec un gros fichier ou le système manque d'espace)

parfois, vous recevrez également le message d'erreur suivant comme celui-ci

Not enough space in /var/tmp.

Vous pouvez lire comment résoudre ce problème ici: http://kb.iu.edu/data/akqv.html

rɑːdʒɑ
la source
"Le tampon d'édition vi a besoin d'un espace égal à environ le double de la taille du fichier avec lequel vous travaillez" Source?
atripathi
1
il y a longtemps, j'ai lu sur kb.iu.edu/data/akqv.html . donc je vous l'ai donné
rɑːdʒɑ
20

Vim n'a pas été conçu pour les gros fichiers. Il a certaines fonctionnalités qui ralentissent considérablement l'expérience utilisateur. Par exemple, il charge le fichier en mémoire, ce qui limite essentiellement la modification de fichiers inférieurs à la taille de votre mémoire. De plus, des fonctionnalités telles que la coloration syntaxique, l'échange de fichiers et l'annulation sont très inefficaces avec des fichiers volumineux et ralentissent encore plus les choses. Un autre problème est que les vimattentes ne sont pas trop longues. Si un fichier contient quelques caractères de nouvelle ligne vimdevient inutilisable.

Cela dit, il existe des plugins comme vim-largefile qui modifient des paramètres particuliers pour être plus efficaces avec des fichiers volumineux, mais à la fin vimne seront jamais accrocheurs lorsque vous lancez plusieurs Gio.

L'essentiel est de ne pas utiliser vimsur de gros fichiers. Si vous souhaitez afficher (contrairement à modifier) ​​des fichiers volumineux, utilisez less. Si vous souhaitez rechercher un motif, utilisez une barre oblique pour lancer la recherche d'un motif:

/<pattern>  # forward search
?<pattern>  # backward search

Si vous souhaitez filtrer la sortie, utilisez une esperluette:

&<pattern>

Démarrez ensuite la sortie continue à l'aide de shift-f. Vous pouvez quitter l'affichage de sortie en continu avec ctrl-cet affiner ou annuler votre modèle de filtre ou lancer une recherche.

Pour modifier des fichiers volumineux, utilisez des outils tels que sed, ils sont efficaces et conçus à cet effet.

Marco
la source