Wie kann ich sehr große Dateien mit guter Leistung öffnen?


27

Ich habe Server-Protokolldateien, die mehrere Gigabyte groß sind (unter Ubuntu). Wenn ich versuche, sie zu öffnen, wird das Terminal für ungefähr eine Minute gesperrt, während die Datei in Vim geladen wird. Gibt es eine Möglichkeit, diese Zeit zu verkürzen, indem Sie beispielsweise Vim so einstellen, dass die Datei bei Bedarf geladen wird, oder eine andere Methode?


4
Warum nicht benutzen less?
Bernhard

1
Möchten Sie die Dateien auf irgendeine Weise manipulieren oder nur anzeigen?
200_success

1
Ich möchte die Dateien bearbeiten.
Peter-B


Höchstwahrscheinlich werde ich für immer von der Seite verbannt, aber ich muss es sagen: Wenn es darum geht, mit riesigen Dateien zu arbeiten, ist Emacs das Werkzeug für diesen Job. :-)
toro2k

Antworten:


25

Versuchen Sie zunächst, vim ohne Plugins oder vimrc zu laden:

vim -u NONE gargantuan.txt

Wenn dies wesentlich schneller ist, haben Sie wahrscheinlich Syntaxhervorhebungen, Foldings, Plugins oder etwas anderes, das die meiste Zeit in Anspruch nimmt. Versuchen Sie, die Inhalte in Ihrem VIMRC auszuschalten (und die Plugins zu deaktivieren), bis Sie den Schuldigen gefunden haben.

Stellen Sie auch sicher, set ft= syn=und syntax off.

Wenn dies nicht hilft, ist es wahrscheinlich so, dass Sie sehr lange Schlangen haben , die das Problem verursachen. Versuchen Sie set nowrap, den Zeilenumbruch auszuschalten.


1
vim -U NONE -N gargantuan.txtwird das gleiche tun , während vim in Laufen nocompatibledie läuft in „vi improved“ Modus statt mit dem alten „vi“ kompatibel zu sein , zu versuchen
ecerulm

15

Vim ist das falsche Werkzeug für den Job: Sie sollten einen Pager wie moreoder verwenden less.

Wenn Sie darauf bestehen, einen Editor zu verwenden, probieren Sie das folgende Beispiel aus dem Vim-Wiki :

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

Kann lessoder kann moreich auch Änderungen an meiner Datei vornehmen?
Martin Tournoij

3
Das können sie natürlich nicht. Protokolle dürfen nicht bearbeitet werden.
Romainl

5
sed wurde zu diesem Zweck erfunden. Sie finden heraus, welche Änderungen Sie vornehmen möchten, ausgedrückt als Ersetzungen, und sedführen sie dann aus , um sie auszuführen. Dies funktioniert auch bei Streams (dh Dateiinhalten, die kein Ende haben, weil sie erstellt werden).
Reinierpost

Ich habe aliased less, moreund manzu vimpager. github.com/rkitover/vimpager
Alex Kroll

5

Das LargeFile.vim-Plugin wurde entwickelt, um das Bearbeiten großer Dateien zu beschleunigen. Siehe http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Von der Seite:

Ermöglicht eine viel schnellere Bearbeitung großer Dateien (Standard: 100 MB + sind "groß"), zum Preis des Deaktivierens von Ereignissen, Rückgängigmachens, Hervorhebens der Syntax usw. Auch auf vim.sf.net verfügbar, wo Sie sie einstufen können.

Laut Handbuch funktioniert das Plugin nur, wenn es installiert ist. Sie können den g:LargeFileGrenzwert festlegen, indem Sie eine Ganzzahl von MB angeben. Der Standardwert ist 20 MB (im Gegensatz zur Projektbeschreibung mit 100).

Das Plugin bietet auch Befehle :UnLarge, :Largeund :Large!zu deaktivieren, reaktivieren oder Kraft ermöglichen (für kleine Dateien) , die jeweils auf der aktuell geladenen Datei.



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.