Як я можу відкрити дуже великі файли з хорошою продуктивністю?


27

У мене є файли журналів сервера розміром у кілька гігабайт (на Ubuntu). Коли я намагаюся їх відкрити, термінал блокується на хвилину або близько того, коли файл завантажується у Vim. Чи є спосіб скоротити цей час, наприклад, встановивши Vim для завантаження файлу на вимогу або іншим способом?


4
Чому б не використовувати less?
Бернхард

1
Чи маєте ви намір будь-яким чином маніпулювати файлами, чи просто хочете їх переглядати?
200_успіх

1
Я хотів би відредагувати файли.
peter-b


Швидше за все, мені назавжди буде заборонено працювати з сайтом, але я мушу це сказати: коли справа доходить до величезних файлів, Emacs - це інструмент для роботи. :-)
toro2k

Відповіді:


25

По-перше, спробуйте завантажити vim без плагінів або vimrc:

vim -u NONE gargantuan.txt

Якщо це значно швидше, то, ймовірно, у вас є виділення синтаксису, складання, плагіни чи щось інше, що займає більшу частину часу. Спробуйте вимкнути речі у своєму vimrc (та відключити плагіни), поки не знайдете винуватця.

Також переконайтесь, що set ft= syn=і syntax off.

Якщо це не допомагає, можливо, у вас є дуже довгі рядки , які викликають проблему. Спробуйте set nowrapвимкнути обертання ліній.


1
vim -U NONE -N gargantuan.txtзробить те ж саме під час запуску vim, в nocompatibleякому працює в режимі "vi iMproved", замість того, щоб намагатися бути сумісним зі старим "vi"
ecerulm

15

Vim - неправильний інструмент для роботи: ви повинні використовувати пейджер типу « moreабо» less.

Якщо ви наполягаєте на використанні редактора, спробуйте цей приклад, адаптований із вікі 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

Може lessабо moreж внести зміни в файл?
Мартін Турноїй

3
Вони, звичайно, не можуть. Журнали не призначені для редагування.
romainl

5
Для цього була винайдена sed . Ви з'ясовуєте, які зміни ви хочете внести, виражаючись як підстановки, і запустите sedїх виконувати. Це також працює в потоках (тобто вміст файлів, який не має кінця, оскільки він створюється).
reinierpost

Я псевдонім less, moreі manдо vimpager. github.com/rkitover/vimpager
Алекс Кролл

5

Плагін LargeFile.vim призначений для швидшого редагування великих файлів. Див. Http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Зі сторінки:

Дозволяє набагато швидше редагувати великі файли (за замовчуванням: 100 Мб + "великі") за ціною вимкнення подій, скасування, підсвічування синтаксису тощо. Також доступно на vim.sf.net, де ви можете їх класифікувати.

Згідно з посібником, плагін працює лише встановивши його. Ви можете встановити обрізання, змінивши g:LargeFileціле число МБ, яке зазначає, що за замовчуванням до 20 МБ (на відміну від опису проекту, який говорить про 100)

Плагін також забезпечує команди :UnLarge, :Largeа :Large!також вимкнути, повторно ввімкнути або примусити включити (для невеликих файлів) відповідно завантажений файл, що завантажується в даний час.


2

Я чув, що вимкнення підсвічування синтаксису може допомогти:

:syntax off

Увімкнення будь-якого виду складання також має величезний ефект
craigp

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.