Jak mogę otworzyć bardzo duże pliki z dobrą wydajnością?


27

Mam pliki dziennika serwera, które mają kilka gigabajtów (na Ubuntu). Kiedy próbuję je otworzyć, terminal blokuje się na minutę, podczas gdy plik jest ładowany do Vima. Czy istnieje sposób na skrócenie tego czasu, na przykład poprzez ustawienie Vima, aby ładował plik na żądanie, lub inną metodą?


4
Dlaczego nie użyć less?
Bernhard

1
Czy zamierzasz w jakikolwiek sposób manipulować plikami, czy po prostu chcesz je wyświetlić?
200_success

1
Chciałbym edytować pliki.
peter-b


Najprawdopodobniej zostanę zablokowany na stronie na zawsze, ale muszę to powiedzieć: jeśli chodzi o pracę z dużymi plikami, Emacs jest narzędziem do tego zadania. :-)
toro2k

Odpowiedzi:


25

Najpierw spróbuj załadować vima bez wtyczek lub vimrc:

vim -u NONE gargantuan.txt

Jeśli jest to znacznie szybsze, prawdopodobnie masz podświetlanie składni, zwijanie, wtyczki lub coś innego, co zajmuje większość czasu. Spróbuj wyłączyć rzeczy w vimrc (i wyłączyć wtyczki), aż znajdziesz winowajcę.

Upewnij się także set ft= syn=i syntax off.

Jeśli to nie pomoże, prawdopodobnie przyczyną problemu są bardzo długie linie . Spróbuj set nowrapwyłączyć zawijanie linii.


1
vim -U NONE -N gargantuan.txtzrobi to samo podczas uruchamiania vima, w nocompatiblektórym działa w trybie „vi iMproved” zamiast próbować być kompatybilnym ze starym „vi”
ecerulm

15

Vim jest nieodpowiednim narzędziem do pracy: powinieneś użyć pagera takiego jak morelub less.

Jeśli nalegasz na użycie edytora, wypróbuj ten przykład dostosowany z wiki Vima :

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

Może lesslub moreteż dokonać zmian w moim pliku?
Martin Tournoij,

3
Oczywiście nie mogą. Dzienniki nie są przeznaczone do edycji.
romainl

5
sed został wymyślony w tym celu. Zastanawiasz się, jakie zmiany chcesz wprowadzić, wyrażone jako podstawienia, a następnie biegniesz, sedaby je wprowadzić. Działa to również w przypadku strumieni (tj. Zawartości pliku, która nie ma końca, ponieważ jest tworzona).
reinierpost

Mam alias less, morea mando vimpager. github.com/rkitover/vimpager
Alex Kroll

5

Wtyczka LargeFile.vim ma na celu przyspieszenie edycji dużych plików. Zobacz http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Ze strony:

Umożliwia znacznie szybszą edycję dużych plików (domyślnie: 100 MB + to „duże”), w cenie wyłączania zdarzeń, cofania, podświetlania składni itp. Dostępne również na vim.sf.net, gdzie można je uszeregować.

Zgodnie z instrukcją wtyczka działa po prostu po zainstalowaniu. Możesz ustawić wartość odcięcia, zmieniając g:LargeFilena liczbę całkowitą MB, która domyślnie wynosi 20 MB (w przeciwieństwie do opisu projektu, który mówi 100)

Wtyczka zapewnia także polecenia :UnLarge, :Largei :Large!wyłączyć, ponownie włączyć, lub siły włączyć (dla małych plików) odpowiednio na aktualnie załadowanego pliku.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.