2013-08-19 28 views
18

Emacs đôi khi bị treo khi xem tệp lớn. Nhưng nó nhanh với (global-font-lock-mode -1).Làm thế nào để cải thiện hiệu suất của emacs khi xem tập tin lớn?

Tôi đang sử dụng một ngã ba Prelude.

Emacs phiên bản: 24,3 cacao hệ thống: OS X 10.8.4

Cập nhật: Tôi tìm thấy (setq jit-lock-defer-time 0.05) là một phương pháp để cải thiện tốc độ di chuyển.

+0

Bạn đã anwered câu hỏi của riêng bạn. font-lock chậm. Ngoài ra, 'find-file-literally' là tốt vì nó đưa bạn vào chế độ cơ bản. –

+0

@ abo-abo Sau đó, đề xuất của bạn là tắt 'font-lock-mode'? – goofansu

+0

@ abo-abo Tệp lớn của tôi là khoảng 8000 dòng. Tôi nghĩ nó bình thường. – goofansu

Trả lời

25

Để trợ giúp với các tệp lớn, tôi đã cài đặt chế độ cơ bản (tránh khóa phông chữ), tắt hoàn tác và làm cho bộ đệm chỉ đọc để tránh bất kỳ thay đổi ngẫu nhiên nào (sao lưu không cần thiết) các tệp lớn).

(defun my-find-file-check-make-large-file-read-only-hook() 
    "If a file is over a given size, make the buffer read only." 
    (when (> (buffer-size) (* 1024 1024)) 
    (setq buffer-read-only t) 
    (buffer-disable-undo) 
    (fundamental-mode))) 

(add-hook 'find-file-hook 'my-find-file-check-make-large-file-read-only-hook) 

Rõ ràng điều chỉnh giá trị ngưỡng khi bạn thấy phù hợp.

+1

Cảm ơn bạn. Nhưng tôi cũng muốn chỉnh sửa tệp này. Bạn có thể thấy mô tả ở trên của tôi về tệp "lớn". – goofansu

+0

Điều chỉnh là tốt, tôi sẽ thử. Cảm ơn bạn. – goofansu

+0

@goofansu Chắc chắn, chỉ cần đưa ra các thiết lập của 'đệm-chỉ đọc' ... vui vì nó làm việc cho bạn –

13

Nếu bạn cần làm việc với các tệp thực sự lớn, bạn có thể sử dụng gói View Large Files cho phép "xem, chỉnh sửa và tìm kiếm trong các tệp lớn theo khối". Sau khi require nhập gói mở các tệp lớn với M-x vlfi.

+0

Cảm ơn bạn, tôi sẽ thử nó. – goofansu

2

Tôi thường bỏ ghi các dòng dài và thụt lề bằng các thẻ (như HTML, XML, JSON).

Để thực hiện hoạt động như thể tôi thêm:

(setq line-number-display-limit large-file-warning-threshold) 
(setq line-number-display-limit-width 200) 

(defun my--is-file-large() 
    "If buffer too large and my cause performance issue." 
    (< large-file-warning-threshold (buffer-size))) 

(define-derived-mode my-large-file-mode fundamental-mode "LargeFile" 
    "Fixes performance issues in Emacs for large files." 
    ;; (setq buffer-read-only t) 
    (setq bidi-display-reordering nil) 
    (jit-lock-mode nil) 
    (buffer-disable-undo) 
    (set (make-variable-buffer-local 'global-hl-line-mode) nil) 
    (set (make-variable-buffer-local 'line-number-mode) nil) 
    (set (make-variable-buffer-local 'column-number-mode) nil)) 

(add-to-list 'magic-mode-alist (cons #'my--is-file-large #'my-large-file-mode)) 

Lưu ý rằng tôi không sử dụng find-file-hooks như magic-mode-alist thường rỗng và được ưu tiên. Nếu tôi thêm find-file-hooks, trước tiên hãy xác thực tệp XML theo nxml-mode và sau đó chuyển sang fundamental-mode.

Tôi chia dòng bằng regex, cho XML là: C-M-% ><RET>NL< RET !.

Sau khi Emac chia các dòng dài - có thể bật nhiều mã *-modes và thụt lề lại.

+1

câu trả lời này đã giúp, nhưng đối với tôi vô hiệu hóa 'bidi-display-reordering' là đủ – packet0

Các vấn đề liên quan