Как я могу открыть очень большие файлы с хорошей производительностью?


27

У меня есть файлы журнала сервера размером в несколько гигабайт (в Ubuntu). Когда я пытаюсь открыть их, терминал блокируется на минуту или около того, пока файл загружается в Vim. Есть ли способ сократить это время, например, установив Vim для загрузки файла по требованию или каким-либо другим способом?


4
Почему бы не использовать less?
Бернхард

1
Вы намереваетесь каким-либо образом манипулировать файлами или просто хотите их просмотреть?
200_success

1
Я хотел бы редактировать файлы.
Питер-б


Скорее всего, меня навсегда забанят с сайта, но я должен сказать это: когда дело доходит до работы с огромными файлами, 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выполняете их. Это также работает с потоками (т. Е. Содержимое файла, которое не имеет конца, потому что оно создается).
сообщение от

Я псевдоним 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!для отключения, повторных включения, или сил позволяет (для небольших файлов) , соответственно , на загруженный в данный момент файл.



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.