Como posso abrir arquivos muito grandes com bom desempenho?


27

Eu tenho arquivos de log do servidor com vários gigabytes de tamanho (no Ubuntu). Quando tento abri-los, o terminal trava por um minuto ou mais enquanto o arquivo é carregado no Vim. Existe uma maneira de reduzir esse tempo, por exemplo, configurando o Vim para carregar o arquivo sob demanda ou por algum outro método?


4
Por que não usar less?
Bernhard

11
Você pretende manipular os arquivos de alguma forma ou apenas deseja visualizá-los?
200_success 03/02

11
Eu gostaria de editar os arquivos.
21415 peter-b #


Provavelmente serei banido do site para sempre, mas devo dizer: quando se trata de arquivos grandes, o Emacs é a ferramenta para o trabalho. :-)
toro2k

Respostas:


25

Primeiro, tente carregar o vim sem plugins ou vimrc:

vim -u NONE gargantuan.txt

Se isso for substancialmente mais rápido, é provável que você tenha destaque de sintaxe, dobra, plugins ou qualquer outra coisa que esteja ocupando a maior parte do tempo. Tente desativar as coisas no seu vimrc (e desativar os plugins) até encontrar o culpado.

Certifique-se também de set ft= syn=e syntax off.

Se isso não ajudar, provavelmente é o caso de você ter longas filas que estão causando o problema. Tente set nowrapdesativar a quebra de linha.


11
vim -U NONE -N gargantuan.txtvim vai fazer a mesma coisa durante a execução em nocompatibleque é executado em "vi melhorado" modo em vez de tentar ser compatível com o velho "vi"
ecerulm

15

O Vim é a ferramenta errada para o trabalho: você deve usar um pager como moreou less.

Se você insistir em usar um editor, tente este exemplo adaptado do wiki do 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

Pode lessou moretambém fazer alterações no meu arquivo?
Martin Tournoij

3
Eles não podem, é claro. Os logs não devem ser editados.
romainl

5
O sed foi inventado para esse fim. Você descobre quais alterações deseja expressar, expressas como substituições, e executa sedpara executá-las. Isso também funciona em fluxos (ou seja, conteúdo de arquivo que não tem fim porque está sendo produzido).
Reinierpost

Eu tenho alias less, moree manpara vimpager. github.com/rkitover/vimpager
Alex Kroll

5

O plug-in LargeFile.vim foi desenvolvido para acelerar a edição de arquivos grandes. Consulte http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Na página:

Permite uma edição muito mais rápida de arquivos grandes (padrão: + 100 MB são "grandes"), ao preço de desativar eventos, desfazer, realce de sintaxe, etc. Também disponível em vim.sf.net, onde você pode classificá-lo.

De acordo com o manual, o plugin funciona apenas com a instalação. Você pode definir o ponto de corte alterando g:LargeFilepara um número inteiro de MB, cujo padrão é 20 MB (em contraste com a descrição do projeto, que indica 100)

O plugin também fornece comandos :UnLarge, :Largee :Large!para desativar, reativar, ou força de habilitação (para arquivos pequenos), respectivamente, sobre o arquivo carregado no momento.


2

Ouvi dizer que desativar o destaque da sintaxe pode ajudar:

:syntax off

Tendo em qualquer tipo de dobrar activado também tem um efeito enorme
craigp

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.