Come posso aprire file di grandi dimensioni con buone prestazioni?


27

Ho file di registro del server di diverse dimensioni di gigabyte (su Ubuntu). Quando provo ad aprirli, il terminale si blocca per circa un minuto mentre il file viene caricato in Vim. C'è un modo per ridurre questo tempo, ad esempio impostando Vim per caricare il file su richiesta o con qualche altro metodo?


4
Perché non usare less?
Bernhard,

1
Intendi manipolare i file in qualche modo o vuoi semplicemente visualizzarli?
200_successo

1
Vorrei modificare i file.
peter-b,


Molto probabilmente verrò bandito dal sito per sempre, ma devo dirlo: quando si tratta di lavorare con file di grandi dimensioni, Emacs è lo strumento per il lavoro. :-)
toro2k,

Risposte:


25

Innanzitutto, prova a caricare vim senza plug-in o vimrc:

vim -u NONE gargantuan.txt

Se questo è sostanzialmente più veloce, probabilmente hai l'evidenziazione della sintassi, la piegatura, i plug-in o qualcos'altro che sta succedendo per la maggior parte del tempo. Prova a disattivare roba nel tuo vimrc (e disabilitare i tuoi plugin) fino a trovare il colpevole.

Assicurati anche di set ft= syn=e syntax off.

Se questo non aiuta, è probabilmente il caso che avete molto lunghe linee che causano il problema. Prova set nowrapa disattivare il ritorno a capo.


1
vim -U NONE -N gargantuan.txtfarà lo stesso durante l'esecuzione di vim in nocompatiblecui viene eseguito in modalità "vi iMproved" invece di provare a essere compatibile con il vecchio "vi"
ecerulm

15

Vim è lo strumento sbagliato per il lavoro: dovresti usare un cercapersone come moreo less.

Se insisti nell'usare un editor, prova questo esempio adattato dal wiki di 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

Posso lesso moreanche apportare modifiche al mio file?
Martin Tournoij,

3
Non possono, ovviamente. I registri non sono pensati per essere modificati.
Romainl,

5
sed è stata inventata per questo scopo. Capisci quali modifiche vuoi apportare, espresse come sostituzioni, quindi corri sedper eseguirle. Funziona anche su stream (ovvero contenuto di file che non ha fine perché viene prodotto).
reinierpost,

Ho alias less, moree manal vimpager. github.com/rkitover/vimpager
Alex Kroll,

5

Il plugin LargeFile.vim è progettato per velocizzare la modifica di file di grandi dimensioni. Vedi http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Dalla pagina:

Consente una modifica molto più rapida di file di grandi dimensioni (impostazione predefinita: 100 MB + sono "grandi"), al prezzo di disattivare eventi, annullare, evidenziare la sintassi, ecc. Disponibile anche su vim.sf.net dove è possibile classificarlo.

Secondo il manuale, il plugin funziona semplicemente installandolo. È possibile impostare il cutoff modificando g:LargeFile, su un numero intero di MB, che per impostazione predefinita è 20 MB (in contrasto con la descrizione del progetto che dice 100)

Il plugin offre anche i comandi :UnLarge, :Largee :Large!per disabilitare, riattivare, o la forza di abilitazione (per file di piccole dimensioni), rispettivamente sul file attualmente caricato.


2

Ho sentito che disattivare l'evidenziazione della sintassi può aiutare:

:syntax off

Anche avere qualsiasi tipo di piegatura abilitato ha un effetto enorme
craigp

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.