Как улучшить производительность emacs при просмотре большого файла?
Emacs иногда зависает при просмотре большого файла. Но это быстро с (global-font-lock-mode -1)
.
Я использую вилку Prelude.
Версия Emacs: 24.3 cocoa
Система: OS X 10.8.4
Обновление: я обнаружил, что (setq jit-lock-defer-time 0.05)
- это способ улучшения скорости прокрутки.
Ответы
Ответ 1
Чтобы помочь с большими файлами, я установил свой собственный 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)
Очевидно, настройте пороговое значение, как вы сочтете нужным.
Ответ 2
Если вам нужно работать с действительно большими файлами, вы можете использовать пакет Просмотр больших файлов, который позволяет "просматривать, редактировать и искать в больших файлы в кусках". После require
пакета распакуйте большие файлы с помощью M-x vlfi.
Ответ 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
, сначала проверьте файл XML на nxml-mode
, а затем переключитесь на fundamental-mode
.
Я разделяю строку на regex, для XML it: C-M-% >< RET >NL< RET !
.
После того, как Emacs разделит длинные строки - возможно включить многие *-modes
и код повторного отступа.