Подтвердить что ты не робот

Как улучшить производительность emacs при просмотре большого файла?

Emacs иногда зависает при просмотре большого файла. Но это быстро с (global-font-lock-mode -1).

Я использую вилку Prelude.

Версия Emacs: 24.3 cocoa Система: OS X 10.8.4

Обновление: я обнаружил, что (setq jit-lock-defer-time 0.05) - это способ улучшения скорости прокрутки.

4b9b3361

Ответ 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 и код повторного отступа.