Как включить flyspell-mode в emacs для всех файлов и всех основных режимов? - PullRequest
14 голосов
/ 28 июля 2011

Как включить автоматический режим flyspell для каждого файла и каждого основного режима при запуске Emacs?

Кроме того, существует ли словарь XML, который не помечает теги XML как слова с ошибками

Ответы [ 3 ]

19 голосов
/ 19 ноября 2013

Ответ на этот вопрос работал для меня:

Как включить автоматическую проверку орфографии по умолчанию?

Кроме того, он выглядит более общим, в отличие оттекущий проголосовавший ответ.Добавьте следующие строки в ваш .emacs или init.el.

(add-hook 'text-mode-hook 'flyspell-mode)
(add-hook 'prog-mode-hook 'flyspell-prog-mode)
17 голосов
/ 28 июля 2011

Скорее всего, вы не хотите, чтобы flyspell-mode был включен для всех режимов, но вместо этого хотите, чтобы flyspell-mode был включен для режимов, которые в основном работают с текстом (текстовый режим, режим сообщений и т. Д.) И flyspell-prog-mode для режимов программирования (C / C ++, Java, Ruby, Lisp и т. д.). Разница между этими двумя режимами заключается в том, что первый проверяет все слова, тогда как flyspell-prog-mode проверяет только слова в комментариях и строках (тем самым избегая проверки кода, который обычно не является словами).

В любом случае, нет единого места для включения flyspell во всех файлах / буферах, потому что он был написан так, чтобы всегда быть локальным буфером. Близкое приближение было бы

(defun turn-on-flyspell () (flyspell-mode 1))
(add-hook 'find-file-hooks 'turn-on-flyspell)

Это не распространяется на буферы, у которых нет связанных файлов, и я не советую использовать их, потому что они не различают режимы программирования и режимы непрограммирования - что я считаю полезным.

Поскольку нет способа узнать, являются ли определенные режимы режимами программирования или нет, вам необходимо вручную добавить настройки для всех режимов программирования, которые вам нужны, с помощью чего-то вроде:

(mapcar (lambda (mode-hook) (add-hook mode-hook 'flyspell-prog-mode))
        '(c-mode-common-hook tcl-mode-hook emacs-lisp-mode-hook 
          ruby-mode-hook java-mode-hook))

Примечание: два куска кода, вероятно, не очень хорошо сочетаются друг с другом.

И, что касается XML, flyspell уже имеет настройки для sgml-mode, html-mode и nxml-mode, чтобы не проверять правописание тегов (по состоянию на Emacs 23.2). Если вы используете более старую версию Emacs (обратно до 21.1), вы сможете добавить это в ваш .emacs, чтобы получить поддержку nxml-mode:

(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify)
3 голосов
/ 28 июля 2011

Вы можете добавить следующее в файл инициализации Emacs:

(Flyspell-все-режимы)

Состояния описания функции:

Используйте Flyspell во всех основных режимах. Применяется как к существующим буферам, так и к буферы, которые вы впоследствии создадите. Отключает `flyspell-text-mode ' если включен.

РЕДАКТИРОВАТЬ: Очевидно, вышеупомянутая функция включена только в версию flyspell, которая есть в Emacs 24. Если вы не можете использовать эту версию, вам следует вместо этого использовать решение, предложенное Trey, для «полуглобального» включения flyspell. Чтобы отключить проверку тегов XML с помощью NXML, вы можете добавить следующую строку в файл инициализации Emacs:

(put 'nxml-mode 'flyspell-mode-predicate 'sgml-mode-flyspell-verify)

Примечание: эта строка уже есть в flyspell.el, включенном в Emacs 24.

...