Подсветка синтаксиса для не буквенно-цифровых символов в emacs

Я хотел бы, чтобы определенные небуквенно-цифровые символы (= + / ‹ > и т. д.) выделялись в emacs при редактировании любого языка.

Используя ответ на другой вопрос на этом сайте, я нашел это решение для выделения «%» при редактировании Fortran:

(font-lock-add-keywords 'f90-mode
        '(("%" . font-lock-keyword-face)))

но это только один символ на одном языке. Я могу добиться того, чего хочу, загрязняя свой файл .emacs:

(font-lock-add-keywords 'c++-mode
        '(("=" . font-lock-keyword-face)))

(font-lock-add-keywords 'java-mode
        '(("=" . font-lock-keyword-face)))

(font-lock-add-keywords 'python-mode
        '(("=" . font-lock-keyword-face)))

и так далее, но это приводит к ошибке, из-за которой последние несколько строк любого файла вообще не подсвечивают синтаксис.

Как включить подсветку синтаксиса для определенного набора не буквенно-цифровых символов во всех языковых режимах?


person Jake    schedule 08.08.2015    source источник


Ответы (1)


Используйте библиотеку highlight-chars.el (код здесь).

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

  • строка символов
  • диапазон последовательных символов (символы Emacs являются целыми числами)
  • класс символов (например, [:nonascii:], [:space:])
  • набор символов (например, iso-8859-1 или lao)

Вы также можете исключить любой набор символов из такого выделения.

Таким образом, вы можете, например, выделить все символы в наборе символов greek-iso8859-7, кроме символа GREEK SMALL LETTER LAMBDA. Или выделите все символы класса [:space:] (пробелы), кроме tab. Или все символы Юникода в диапазоне от ?\u2190 до ?\u21ff (математические стрелки), кроме ?\u21b6, ?\u21b7, ?\u21ba и ?\u21bb (изогнутые стрелки)...

person Drew    schedule 08.08.2015
comment
Спасибо, это довольно близко к тому, что я хотел. После использования M-x hc-highlight-chars и ввода символов, которые я хочу выделить, выделение отображается только в текущем буфере и полностью удаляется после выхода из emacs. Есть ли способ сделать основные моменты постоянными и отображаемыми во всех буферах? - person Jake; 08.08.2015
comment
См. часть файла Commentary, которая начинается Но если вы хотите использовать определенный вид выделения по умолчанию глобально, то просто добавьте соответствующую функцию hc-highlight-* в хук font-lock-mode-hook.. - person Drew; 09.08.2015
comment
IOW, да, можно сделать глобальным, и автоматически переподсвечивать. В некотором смысле, это постоянное выделение. (Единственный другой вид постоянной подсветки в Emacs — это режим Расширенный. См. это чтобы узнать больше об этом.) - person Drew; 09.08.2015
comment
Я добавил (add-hook 'font-lock-mode-hook 'hc-highlight-chars) в свой файл .emacs, и теперь вся подсветка синтаксиса исчезла. Когда я удаляю эту строку и перезапускаю emacs, подсветка синтаксиса все еще не работает. - person Jake; 09.08.2015
comment
Если вы удалили добавленную вами строку и увидели в следующем сеансе Emacs, что что-то не работает, то, похоже, вы изменили что-то еще, помимо простого добавления (а затем удаления) этой строки. - person Drew; 09.08.2015