О исправлении помехи между режимом Company и Yasnippet - PullRequest
7 голосов
/ 18 января 2010

Emacs wiki говорит:

Компания мешает Родное поведение Ясниппет. Вот быстрая починка: http://gist.github.com/265010

Код следующий:

(define-key company-active-map "\t" 'company-yasnippet-or-completion)

(defun company-yasnippet-or-completion ()
  (interactive)
  (if (yas/expansion-at-point)
      (progn (company-abort)
             (yas/expand))
    (company-complete-common)))

(defun yas/expansion-at-point ()
  "Tested with v0.6.1. Extracted from `yas/expand-1'"
    (first (yas/current-key)))

Я поместил этот код в мой .emacs и появилось следующее сообщение:

Warning (initialization): An error occurred while loading `c:/Documents and Settings/Alex.AUTOINSTALL.001/Application Data/.emacs.elc':

Symbol's value as variable is void: company-active-map

To ensure normal operation, you should investigate and remove the
cause of the error in your initialization file.  Start Emacs with
the `--debug-init' option to view a complete error backtrace.

Должен ли я поместить код исправления в файл .el YASnippet? или в моем .emacs (который выдает мне ошибку)?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2015

Упомянутый вами фрагмент больше не работает.

Вот фрагмент, который вы можете использовать вместо:

(defun company-yasnippet-or-completion ()
  (interactive)
  (let ((yas-fallback-behavior nil))
    (unless (yas-expand)
      (call-interactively #'company-complete-common))))

Чтобы убедиться, что это вызывается вместо company-complete-common, используйте

(add-hook 'company-mode-hook (lambda ()
  (substitute-key-definition 'company-complete-common
                             'company-yasnippet-or-completion
                             company-active-map)))

Справочная информация: локально изменяет значение yas-fallback-behaviour, в результате чего yas вызывает company-complete-common, если завершение не найдено.

0 голосов
/ 18 января 2010

Звучит как проблема с путём загрузки. Значение символа void означает, что emacs не может найти определение для него - скорее всего, потому что файл, содержащий его определение, еще не был загружен.

Вы можете попробовать добавить что-то подобное в ваш .emacs (до кода, вызывающего ошибку):

;; where ~/.emacs.d/ is the path to a directory containing
;; additional library code you want emacs to load
(add-to-list 'load-path "~/.emacs.d/")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...