查看大文件时如何提高emacs的性能?

时间:2013-08-19 14:44:21

标签: emacs

在查看大文件时,Emacs有时会挂起。但(global-font-lock-mode -1)的速度很快。

我正在使用Prelude的分支。

Emacs版本:24.3可可 系统:OS X 10.8.4

更新:我发现(setq jit-lock-defer-time 0.05)是一种提高滚动速度的方法。

4 个答案:

答案 0 :(得分:31)

为了帮助处理大文件,我已经安装了自己的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 :(得分:16)

如果您需要处理非常大的文件,可以使用View Large Files程序包,该程序包允许“以块为单位查看,编辑和搜索大型文件”。在require包之后用 M-x vlfi 打开大文件。

答案 2 :(得分:3)

我经常展开长行并按标签缩进(如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和重新缩进代码。

答案 3 :(得分:0)

这可能是解决问题的办法
M-x外壳
然后
减去your_large_file.txt
您可以继续