2013-08-19 55 views
18

查看大文件時,Emacs有時會掛起。但它與(global-font-lock-mode -1)快速。如何在查看大文件時提高emacs性能?

我正在使用Prelude的分支。

Emacs的版本:24.3可可 系統:OS X 10.8.4

更新:我發現(setq jit-lock-defer-time 0.05)是提高滾動速度的方法。

+0

您已經回答了您自己的問題。字體鎖很慢。另外,'find-file-literally'很好,因爲它可以讓你處於基本模式。 –

+0

@abo-abo那麼你的建議是禁用'font-lock-mode'? – goofansu

+0

@ abo-abo我的大文件大約有8000行。我認爲這很正常。 – goofansu

回答

25

爲了幫助處理大文件,我安裝了我自己的find-file-hook,它打開基本模式(避免字體鎖定),關閉撤消,並使緩衝區只讀,以避免任何意外更改(進行不必要的備份大文件)。

(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) 

明顯調整閾值,因爲你認爲合適。

+1

謝謝。但我也想編輯這個文件。你可以看到我上面對「大」文件的描述。 – goofansu

+0

調整好,我會試一試。謝謝。 – goofansu

+0

@goofansu當然,只是取出「緩衝區只讀」的設置...很高興它適合你 –

13

如果您需要處理非常大的文件,可以使用View Large Files包,該包允許「以大塊文件查看,編輯和搜索塊」。在require之後打開包含大文件的文件M-x vlfi

+0

謝謝,我會嘗試。 – goofansu

2

我通常通過標籤(如HTML,XML,JSON)展開長行和縮進。

爲了使這樣的操作可能我補充一下:

(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)) 

請注意,我不使用find-file-hooks作爲magic-mode-alist通常是空的,並具有優先權。如果我添加find-file-hooks它首先通過nxml-mode驗證XML文件,然後切換到fundamental-mode

我用正則表達式分隔線,對於XML它:C-M-% ><RET>NL< RET !

Emacs拆分長行之後 - 可以啓用許多*-modes和重新縮進代碼。

+1

這個答案有幫助,但對我來說,禁用「bidi-display-reordering」就足夠了 – packet0