emacs: режим сокращения не может работать в режиме python

Я определил некоторые сокращения для режима Python, используя такой код

(define-abbrev-table 'python-mode-abbrev-table
  '(
    ("i_settings" "from django.conf import settings")
    ("i_requestcontext" "from django.template import RequestContext")
    ("i_model" "from django.db import models")
    ("i_form" "from django import forms")
    ))

но он не может работать правильно. например, я ввожу «i_settings», затем ввожу пробел, emacs не расширяется до «из настроек импорта django.conf». Я пробовал с отключенными всеми настройками, но не помогло.


person YuYang    schedule 09.11.2013    source источник


Ответы (2)


Кажется, подчеркивание _ препятствует расширению. Попробуйте ту же таблицу без символов подчеркивания.

(define-abbrev-table 'python-mode-abbrev-table
  '(
    ("isettings" "from django.conf import settings")
    ("irequestcontext" "from django.template import RequestContext")
    ("imodel" "from django.db import models")
    ("iform" "from django import forms")
    ))

и он будет работать так, как ожидалось.

person Olaf Dietsche    schedule 09.11.2013
comment
Кажется, ничего о подчеркивании. потому что, если я изменяю python-mode-abbrev-table на sh-mode-abbrev-table, а затем в исходном файле сценария оболочки, он работает хорошо. Это очень странно. - person YuYang; 09.11.2013
comment
Я не могу это подтвердить. Замена python-mode-abbrev-table на sh-mode-abbrev-table ничего не меняет. Даже там он не работает с подчеркиванием и обходится без него. - person Olaf Dietsche; 09.11.2013

Внутренний процесс расширения аббревиатуры --abbrev--before-point-- зависит от синтаксиса слова - не вижу причин для этого, кстати, Emacs может вместо этого взять любую печатную форму.

В результате с любым режимом, в котором символ подчеркивания имеет синтаксис слова, ваши определения должны работать, например, с python-mode.el.

person Andreas Röhler    schedule 09.11.2013