Làm thế nào tôi có thể mở các tệp rất lớn với hiệu suất tốt?


27

Tôi có các tệp nhật ký máy chủ có kích thước vài gigabyte (trên Ubuntu). Khi tôi cố mở chúng, thiết bị đầu cuối sẽ khóa trong một phút hoặc lâu hơn trong khi tệp được tải vào Vim. Có cách nào để giảm thời gian này không, ví dụ bằng cách đặt Vim để tải tệp theo yêu cầu hoặc bằng một số phương pháp khác?


4
Tại sao không sử dụng less?
Bernhard

1
Bạn có ý định thao tác các tập tin theo bất kỳ cách nào, hoặc bạn chỉ muốn xem chúng?
200_success

1
Tôi muốn chỉnh sửa các tập tin.
peter-b


Nhiều khả năng tôi sẽ bị cấm khỏi trang này mãi mãi nhưng tôi phải nói rằng: khi nói đến hoạt động với các tệp khổng lồ Emacs là công cụ cho công việc. :-)
toro2k

Câu trả lời:


25

Trước tiên, hãy thử tải vim không có plugin hoặc vimrc:

vim -u NONE gargantuan.txt

Nếu điều này thực sự nhanh hơn, thì có lẽ bạn có cú pháp tô sáng, gấp, bổ trợ hoặc một cái gì đó khác đang diễn ra chiếm phần lớn thời gian. Hãy thử tắt công cụ trong vimrc của bạn (và vô hiệu hóa các plugin của bạn) cho đến khi bạn tìm ra thủ phạm.

Cũng đảm bảo set ft= syn=syntax off.

Nếu điều này không có ích, có lẽ đó là trường hợp bạn có những dòng rất dài gây ra vấn đề. Cố gắng set nowraptắt dòng gói.


1
vim -U NONE -N gargantuan.txtsẽ làm điều tương tự trong khi chạy vim trong nocompatibleđó chạy ở chế độ "vi iMproved" thay vì cố gắng tương thích với "vi" cũ
ecerulm

15

Vim là công cụ sai cho công việc: bạn nên sử dụng một máy nhắn tin như morehoặc less.

Nếu bạn khăng khăng sử dụng một trình soạn thảo, hãy thử ví dụ này được điều chỉnh từ wiki 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

Có thể lesshoặc morecũng có thể thay đổi tập tin của tôi?
Martin Tournoij

3
Họ không thể, tất nhiên. Nhật ký không có nghĩa là phải chỉnh sửa.
romainl

5
sed được phát minh cho mục đích này. Bạn tìm ra những thay đổi bạn muốn thực hiện, được thể hiện dưới dạng thay thế, sau đó chạy sedđể thực hiện chúng. Điều này cũng hoạt động trên các luồng (tức là nội dung tệp không có kết thúc vì nó đang được sản xuất).
Revierpost

Tôi đã bí danh less, moremanđể vimpager. github.com/rkitover/vimpager
Alex Kroll

5

Plugin LargeFile.vim được thiết kế để giúp chỉnh sửa các tệp lớn nhanh hơn. Xem http://www.drchip.org/astronaut/vim/index.html#LARGEFILE .

Từ trang:

Cho phép chỉnh sửa nhanh hơn các tệp lớn (mặc định: 100MB + là "lớn"), với giá tắt các sự kiện, hoàn tác, tô sáng cú pháp, v.v. Cũng có sẵn tại vim.sf.net nơi bạn có thể xếp hạng nó.

Theo hướng dẫn, plugin hoạt động chỉ bằng cách cài đặt nó. Bạn có thể đặt ngưỡng cắt bằng cách thay đổi g:LargeFile, thành số nguyên MB, có giá trị mặc định là 20 MB (ngược lại với mô tả dự án có ghi 100)

Plugin này cũng cung cấp các lệnh :UnLarge, :Large:Large!để vô hiệu hóa, bật lại tính, hoặc lực lượng cho phép (cho các tập tin nhỏ) tương ứng trên các tập tin hiện đang được nạp.


2

Tôi đã nghe nói rằng tắt đánh dấu cú pháp có thể giúp:

:syntax off

Có bất kỳ loại gấp nào được kích hoạt cũng có tác dụng lớn
craigp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.