Rope и Yasnippet в Emacs

Настройвам поддръжка на python за emacs с помощта на rope и yasnippet, като следвам урока, даден на http://www.enigmacurry.com/2009/01/21/autocompleteel-python-code-completion-in-emacs/#disqus_thread. Декларирах низова променлива a_str="Hello". Сега, когато пиша a_str. и натиснете tab, получавам следното съобщение в минибуфера

Symbol's function definition is void: yas/snippet-table

Получавах падащо меню по-рано, но изведнъж това спря да работи. Има ли причина това да се случва?

Освен това бих искал да знам значението на реда

(setq yas/trigger-key (kbd "C-c <kp-multiply>"))

Моля, помогнете Благодаря


person Kris    schedule 08.04.2012    source източник


Отговори (1)


(setq yas/trigger-key (kbd "C-c <kp-multiply>"))

означава: генерирайте вътрешното представяне за свързването на ключове, описано от низа C-c <kp-multiply>, и присвоете тази стойност на променливата yas/trigger-key.

(<kp-multiply> обикновено е клавишът * на клавиатурата.)

След това можете впоследствие да използвате yas/trigger-key в клавишни връзки. напр.:

(local-set-key yas/trigger-key 'some-function)

Що се отнася до основната ви грешка, или нещо не се зарежда правилно (така че yas/snippet-table съществува в кода, но не се зарежда, преди да бъде използвано), или има несъвместимост между Yasnippet и друга библиотека, която се опитва да го използва (вероятно автоматично довършване в този случай).

Виждам в долната част на нишката за коментари, към която сте се свързали, че е имало дискусия по това време за подобна грешка, причинена от промени в автоматичното довършване 0.2 над 0.1. Виждам също, че авторът на урока се свързва към своето git хранилище за собствената си конфигурация на Emacs и все още използва версия 0.1 на автоматичното довършване там.

Така че бих предложил първо да проверите вашите версии на всяка библиотека. Урокът използва:

  • pymacs 0.23
  • yasnippet 0.5.9
  • автоматично довършване 0.1

Версията Rope е неясна и е описана само като „най-новата версия за разработка (от декември 2008 г.)“

Като алтернатива може да предпочетете да вземете версиите директно от това git хранилище (особено тъй като версията на yasnippet в репото казва, че е версия 0.2.2, а не 0.5.9).

Ако го накарате да работи с тях, тогава можете да опитате да надстроите нещата (и може би да добавите коментар към тази нишка, изброяващ набор от съвместими версии, ако излезете с работеща комбинация, която е по-нова).

Ако не успеете, ето друго git хранилище, което може да бъде полезно:

https://github.com/gabrielelanaro/emacs-for-python/

person phils    schedule 08.04.2012
comment
Но ако направя Ctrl-C *, получавам съобщението C-c * е недефинирано - person Kris; 08.04.2012
comment
Имайте предвид, че кодът, за който попитахте, не свързва C-c <kp-multiply> с функция; той просто задава стойността на променлива. (Човек би очаквал, че Yasnippet ще използва тази променлива, за да създаде обвързване в даден момент, но ще трябва да погледна кода, за да разбера дали и къде/кога се случва това.) - person phils; 08.04.2012
comment
Благодаря за отговора. Успях да се отърва от Symbol's function definition is void error by using yasnippet-0.5.9. Използвах най-новата версия 0.6.1, която предполагам причиняваше този проблем. Но мисля, че клавишът tab сега се използва от автоматичното довършване, така че не мога да го използвам за вмъкване на фрагмент с помощта на yasnippet. Има ли начин да се използва различна клавишна комбинация за вмъкване на фрагменти? - person Kris; 08.04.2012
comment
Самият аз не управлявам такава настройка, така че не съм сигурен в подробностите. Може би някой друг може да отговори на това. Най-доброто ми предположение от това, което видях, беше, че това е целта на променливата yas/trigger-key и стойността й е предназначена да бъде ключът за ръчно вмъкване на фрагменти (и че е зададена на нещо различно от TAB, за да се избегне конфликт с автоматичното довършване ). - person phils; 08.04.2012
comment
Най-накрая работих и с rope, и с yasnippet с помощта на (setq yas/trigger-key (kbd "C-c <f8>")) и рестартиране на emacs. - person Kris; 08.04.2012