Веревка и Ясниппет в Emacs

Я настраиваю поддержку python для emacs, используя веревку и 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 автозаполнения.

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

  • пимак 0,23
  • ясниппет 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 * is undefined - 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, которая, я думаю, вызывала эту проблему. Но я думаю, что клавиша табуляции теперь используется автозаполнением, поэтому я не могу использовать ее для вставки фрагмента с помощью yasnippet. Есть ли способ использовать другую комбинацию клавиш для вставки фрагментов? - person Kris; 08.04.2012
comment
Я сам не управляю такой настройкой, поэтому я не уверен в деталях. Может быть, кто-то еще может ответить на это. Мое лучшее предположение из того, что я видел, заключалось в том, что это было целью переменной yas/trigger-key, и значение этого должно было быть ключом для вставки фрагментов вручную (и что для него было установлено что-то отличное от TAB, чтобы избежать конфликта с автозаполнением ). - person phils; 08.04.2012
comment
Наконец, и веревка, и yasnippet заработали, используя (setq yas/trigger-key (kbd "C-c <f8>")) и перезапустив emacs. - person Kris; 08.04.2012