ฉันจะเปิดไฟล์ขนาดใหญ่มากด้วยประสิทธิภาพที่ดีได้อย่างไร


27

ฉันมีไฟล์บันทึกเซิร์ฟเวอร์ที่มีขนาดหลายกิกะไบต์ (บน Ubuntu) เมื่อฉันพยายามเปิดมันเทอร์มินัลก็ล็อคเอาไว้หนึ่งนาทีหรือมากกว่านั้นในขณะที่ไฟล์นั้นถูกโหลดเข้า Vim มีวิธีการลดเวลานี้ตัวอย่างเช่นโดยการตั้งค่าเป็นกลุ่มเพื่อโหลดไฟล์ตามต้องการหรือโดยวิธีอื่น?


4
ทำไมไม่ใช้less?
แบร์นฮาร์ด

1
คุณตั้งใจจะจัดการไฟล์ในทางใดทางหนึ่งหรือคุณแค่ต้องการดูไฟล์เหล่านั้น?
200_success

1
ฉันต้องการแก้ไขไฟล์
peter-b

เกี่ยวข้อง: stackoverflow.com/a/19795855/732016
wchargin

เป็นไปได้ว่าฉันจะถูกแบนจากเว็บไซต์ตลอดไป แต่ฉันต้องบอกว่า: เมื่อมันทำงานกับไฟล์ขนาดใหญ่ Emacs เป็นเครื่องมือสำหรับงาน :-)
toro2k

คำตอบ:


25

ก่อนอื่นให้ลองโหลดเสียงเรียกเข้าโดยไม่มีปลั๊กอินหรือ vimrc:

vim -u NONE gargantuan.txt

หากสิ่งนี้เร็วกว่าปกติคุณอาจมีการเน้นไวยากรณ์การพับปลั๊กอินหรือสิ่งอื่น ๆ ที่เกิดขึ้นซึ่งใช้เวลาส่วนใหญ่ ลองปิดสิ่งต่างๆใน vimrc ของคุณ (และปิดการใช้งานปลั๊กอินของคุณ) จนกว่าคุณจะพบผู้กระทำผิด

นอกจากนี้ยังให้แน่ใจว่าการและset ft= syn=syntax off

หากวิธีนี้ไม่ได้ผลอาจเป็นเพราะคุณมีสายยาวมากที่ทำให้เกิดปัญหา ลองset nowrapปิดการตัดบรรทัด


1
vim -U NONE -N gargantuan.txtจะทำสิ่งเดียวกันในขณะที่ทำงานเป็นกลุ่มnocompatibleซึ่งทำงานในโหมด "vi iMproved" แทนที่จะพยายามใช้งานร่วมกับ "vi" แบบเก่าได้
ecerulm

15

เป็นกลุ่มเป็นเครื่องมือที่ผิดงาน: คุณควรใช้เพจเจอร์เหมือนหรือmoreless

หากคุณยืนยันที่จะใช้โปรแกรมแก้ไขให้ลองตัวอย่างนี้ดัดแปลงจาก 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

สามารถlessหรือmoreยังทำให้การเปลี่ยนแปลงแฟ้มของฉันได้อย่างไร
Martin Tournoij

3
แน่นอนว่าพวกเขาทำไม่ได้ บันทึกไม่ได้มีไว้เพื่อแก้ไข
romainl

5
sedถูกคิดค้นเพื่อการนี้ คุณทราบว่าการเปลี่ยนแปลงใดที่คุณต้องการแสดงเป็นการแทนที่จากนั้นเรียกใช้sedเพื่อดำเนินการ สิ่งนี้ยังใช้งานได้กับสตรีม (เช่นเนื้อหาไฟล์ที่ไม่มีที่สิ้นสุดเพราะกำลังมีการผลิต)
reinierpost

ฉันได้ aliased less, moreและการman github.com/rkitover/vimpagervimpager
Alex Kroll

5

ปลั๊กอิน LargeFile.vim ได้รับการออกแบบให้ทำการแก้ไขไฟล์ขนาดใหญ่ได้เร็วขึ้น ดูhttp://www.drchip.org/astronaut/vim/index.html#LARGEFILE

จากหน้า:

อนุญาตให้แก้ไขไฟล์ขนาดใหญ่ได้เร็วขึ้นมาก (ค่าเริ่มต้น: 100MB + คือ "ใหญ่") ในราคาปิดการทำกิจกรรมเลิกทำการเน้นไวยากรณ์ ฯลฯ นอกจากนี้ยังมีที่ vim.sf.net ซึ่งคุณสามารถจัดอันดับได้

ตามคู่มือการใช้งานปลั๊กอินเพียงแค่ติดตั้ง คุณสามารถตั้งค่า cutoff โดยเปลี่ยนg:LargeFileเป็นจำนวนเต็ม MB ซึ่งมันบอกว่าค่าเริ่มต้นเป็น 20MB (ตรงกันข้ามกับคำอธิบายโครงการที่ระบุว่า 100)

ปลั๊กอินนอกจากนี้ยังมีคำสั่ง:UnLarge, :Largeและ:Large!ปิดการใช้งาน reenable หรือแรงเปิดใช้งาน (ไฟล์เล็ก) ตามลำดับในขณะที่โหลดไฟล์


2

ฉันได้ยินมาว่าการปิดการเน้นไวยากรณ์สามารถช่วย:

:syntax off

การเปิดใช้งานการพับแบบใดก็มีผลอย่างมาก
craigp

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.