Emacs Python.el, Особенности подсветки синтаксиса - PullRequest
3 голосов
/ 02 сентября 2011

Я сейчас использую python.el версии 0.23.1 для Emacs.Подсветка синтаксиса кажется немного неправильной - любое имя переменной, содержащее подчеркивание, за которым следует ключевое слово, приведет к выделению ключевого слова.Например, «foo_list» приведет к выделению «list».

Больше для моего собственного понимания Emacs-Lisp, чем для чего-либо (это не имеет большого значения), как мне это исправить.Здесь я думаю, что соответствующий код находится в "python.el", строки 312-318.Я подозреваю, что проблема связана с определением «начало символа», но я понятия не имею, к чему относится это имя.

(defvar python-font-lock-keywords
  ;; Keywords
  `(,(rx symbol-start
         (or "and" "del" "from" "not" "while" "as" "elif" "global" "or" "with"
             "assert" "else" "if" "pass" "yield" "break" "except" "import"
         "print" "class" "exec" "in" "raise" "continue" "finally" "is"
         "return" "def" "for" "lambda" "try" "self")
     symbol-end)

Одна вещь, с которой я до сих пор боролся в Emacs-Lisp, это то, что яМне трудно в подобных ситуациях следовать именам обратно к своим определениям.

Заранее спасибо!

1 Ответ

3 голосов
/ 02 сентября 2011

Когда вы говорите, что используете python-режим 0.23.1, вы имеете в виду тот, который поставляется в комплекте с Emacs, или этот: http://launchpad.net/python-mode?(кажется, в версии 6. что-то)

Причина, по которой я спрашиваю, состоит в том, что я не могу воспроизвести то, что вы видите.В пустой буфер Python я вставил

def x ():
    a_list =3

, и «список» подсвечивается, только когда я удаляю «a_».Я использую версию, поставляемую в комплекте с Emacs, и версию Emacs со снимком, так что в этом может быть разница?

Кстати, правило блокировки шрифтов, которое вы цитируете, выглядит мне правильным: возможно, проблема в том, что в вашемверсия "_" не имеет синтаксиса символов?Вы можете проверить, набрав

M-: (string (char-syntax ?_))

в буфере Python.Вы должны получить «_» (что означает символ).Если вы получите "."(пунктуация) или что-то еще странное, это, вероятно, объясняет, что пошло не так.

...