Как настроить emacs в режиме python для выделения операторов? - PullRequest
5 голосов
/ 29 апреля 2011

Я настраиваю emacs, чтобы он был моей Python IDE, и я нашел много материалов в Интернете, объясняющих автозаполнение, среди множества других функций.Однако я не могу понять, как заставить подсветку синтаксиса выполнять магию подсветки операторов.

Как я могу настроить свои emacs в режиме python для создания + - разных цветов?Я также хотел бы, чтобы целые числа, числа с плавающей запятой и круглые скобки также различались.

Ответы [ 3 ]

5 голосов
/ 30 апреля 2011

У меня фактически есть что-то вроде этой настройки для моих режимов программирования. это определяет 2 отдельные грани, одну для операторов и одну для символа «конечный оператор» (очевидно, не очень полезный в python). Вы можете изменить регулярное выражение "\\([][|!.+=&/%*,<>(){}:^~-]+\\)", чтобы оно соответствовало интересующим вас операторам, и настроить лица в соответствии с желаемым цветом.

(defvar font-lock-operator-face 'font-lock-operator-face)

(defface font-lock-operator-face
  '((((type tty) (class color)) nil)
    (((class color) (background light))
     (:foreground "dark red"))
    (t nil))
  "Used for operators."
  :group 'font-lock-faces)

(defvar font-lock-end-statement-face 'font-lock-end-statement-face)

(defface font-lock-end-statement-face
  '((((type tty) (class color)) nil)
    (((class color) (background light))
     (:foreground "DarkSlateBlue"))
    (t nil))
  "Used for end statement symbols."
  :group 'font-lock-faces)

(defvar font-lock-operator-keywords
  '(("\\([][|!.+=&/%*,<>(){}:^~-]+\\)" 1 font-lock-operator-face)
    (";" 0 font-lock-end-statement-face)))

затем вы просто включаете это, добавляя ловушку в соответствующие режимы (в этом примере предполагается, что вы используете "python-mode"):

(add-hook 'python-mode-hook
                  '(lambda ()
                     (font-lock-add-keywords nil font-lock-operator-keywords t))
                  t t)
4 голосов
/ 02 мая 2011

Добавьте в файл ~ / .emacs следующее:

;
; Python operator and integer highlighting
; Integers are given font lock's "constant" face since that's unused in python
; Operators, brackets are given "widget-inactive-face" for convenience to end-user 
;

(font-lock-add-keywords 'python-mode
    '(("\\<\\(object\\|str\\|else\\|except\\|finally\\|try\\|\\)\\>" 0 py-builtins-face)  ; adds object and str and fixes it so that keywords that often appear with : are assigned as builtin-face
    ("\\<[\\+-]?[0-9]+\\(.[0-9]+\\)?\\>" 0 'font-lock-constant-face) ; FIXME: negative or positive prefixes do not highlight to this regexp but does to one below
    ("\\([][{}()~^<>:=,.\\+*/%-]\\)" 0 'widget-inactive-face)))
0 голосов
/ 03 декабря 2017

Добавление своего собственного ответа, так как я не мог заставить других работать (по состоянию на emacs 25.3.1, 2017).

Для выделения операторов можно использовать следующий elisp:

;; Operator Fonts
(defface font-lock-operator-face
 '((t (:foreground "#8b8bcd"))) "Basic face for operator." :group 'basic-faces)

;; C-Like
(dolist (mode-iter '(c-mode c++-mode glsl-mode java-mode javascript-mode rust-mode))
  (font-lock-add-keywords mode-iter
   '(("\\([~^&\|!<>=,.\\+*/%-]\\)" 0 'font-lock-operator-face keep))))
;; Scripting
(dolist (mode-iter '(python-mode lua-mode))
  (font-lock-add-keywords mode-iter
   '(("\\([@~^&\|!<>:=,.\\+*/%-]\\)" 0 'font-lock-operator-face keep))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...