Bagaimana saya bisa membuka file yang sangat besar dengan kinerja yang baik?


27

Saya memiliki file log server yang berukuran beberapa gigabytes (di Ubuntu). Ketika saya mencoba membukanya, terminal terkunci selama satu menit atau lebih saat file dimuat ke Vim. Apakah ada cara untuk mengurangi waktu ini, misalnya dengan mengatur Vim untuk memuat file sesuai permintaan, atau dengan metode lain?


4
Kenapa tidak digunakan less?
Bernhard

1
Apakah Anda bermaksud memanipulasi file dengan cara apa pun, atau Anda hanya ingin melihatnya?
200_sukses

1
Saya ingin mengedit file.
peter-b


Kemungkinan besar saya akan diblokir dari situs selamanya tetapi saya harus mengatakannya: ketika datang untuk bekerja dengan file besar Emacs adalah alat untuk pekerjaan itu. :-)
toro2k

Jawaban:


25

Pertama, coba muat vim tanpa plugin atau vimrc:

vim -u NONE gargantuan.txt

Jika ini secara substansial lebih cepat, maka Anda mungkin memiliki penyorotan sintaks, lipat, plugin, atau sesuatu yang terjadi yang menghabiskan sebagian besar waktu. Coba matikan barang di vimrc Anda (dan nonaktifkan plugins Anda) sampai Anda menemukan penyebabnya.

Pastikan juga untuk set ft= syn=dan syntax off.

Jika ini tidak membantu, mungkin Anda memiliki garis yang sangat panjang yang menyebabkan masalah. Cobalah set nowrapuntuk mematikan garis pembungkus.


1
vim -U NONE -N gargantuan.txtakan melakukan hal yang sama saat menjalankan vim di nocompatiblemana berjalan dalam mode "vi iMproved" alih-alih mencoba untuk kompatibel dengan "vi" yang lama
ecerulm

15

Vim adalah alat yang salah untuk pekerjaan itu: Anda harus menggunakan pager seperti moreatau less.

Jika Anda bersikeras menggunakan editor, coba contoh ini diadaptasi dari Vim wiki :

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

Bisakah lessatau morejuga membuat perubahan pada file saya?
Martin Tournoij

3
Tentu saja mereka tidak bisa. Log tidak dimaksudkan untuk diedit.
romainl

5
sed diciptakan untuk tujuan ini. Anda mencari tahu perubahan mana yang ingin Anda buat, dinyatakan sebagai pengganti, lalu jalankan seduntuk melakukannya. Ini juga berfungsi pada stream (yaitu konten file yang tidak ada habisnya karena sedang diproduksi).
reinierpost

Saya telah alias less, moredan manuntuk vimpager. github.com/rkitover/vimpager
Alex Kroll

5

Plugin LargeFile.vim dirancang untuk membuat pengeditan file besar lebih cepat. Lihat http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Dari halaman:

Memungkinkan pengeditan file besar yang lebih cepat (default: 100MB + adalah "besar"), dengan harga mematikan acara, membatalkan, menyoroti sintaksis, dll. Juga tersedia di vim.sf.net di mana Anda dapat memeringkatnya.

Menurut manual, plugin berfungsi hanya dengan menginstalnya. Anda dapat mengatur cutoff dengan mengubah g:LargeFile, ke angka integer MB, yang katanya default ke 20MB (berbeda dengan deskripsi proyek yang mengatakan 100)

Plugin ini juga menyediakan perintah :UnLarge, :Largedan masing-masing :Large!untuk menonaktifkan, mengaktifkan kembali, atau memaksa diaktifkan (untuk file kecil) pada file yang saat ini dimuat.


2

Saya telah mendengar bahwa mematikan penyorotan sintaks dapat membantu:

:syntax off

Memiliki semua jenis lipatan yang diaktifkan juga memiliki efek besar
craigp

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.