Подтвердить что ты не робот

Я получаю сообщение об ошибке при попытке установить auto-complete в emacs

Я новичок в emacs... У меня есть несколько дней, и я думаю, что emacs потрясающе, но я получаю сообщение об ошибке при попытке установить автозаполнение... Я устанавливаю его из http://cx4a.org/software/auto-complete/ работает установка (я использую make файл)... но когда я помещаю эти строки внутри своего emacs.d

(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(require 'auto-complete-config)
(ac-config-default)

Я получаю эту ошибку

Warning (initialization): An error occurred while loading `/home/yo/.emacs':

Symbol value as variable is void: ac-dictionary-directories

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

У меня есть моя папка .emacs в /home/yo/.emacs, и внутри этого у меня есть папка ac-dic.. внутри этого есть режим С++ mode.lisp mode ruby ​​mode... etc..etc... и т.д.....

мой autocomplete.el тоже внутри моего .emacs... что я делаю неправильно??... спасибо!!!

4b9b3361

Ответ 1

ac-dictionary-directories определяется в auto-complete.el, поэтому очевидно, что emacs его не найдет. Поэтому просто измените порядок операторов:

(require 'auto-complete-config)
(ac-config-default)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")   

Теперь он должен работать.

Ответ 2

Я подозреваю, что проблема заключается в том, что add-to-list хочет перейти к существующему списку, но в то время, когда вы его вызываете, такой переменной нет.

Вместо этого вы можете использовать (setq 'ac-dictionary-directories "~/.emacs.d/ac-dict") или следовать рекомендациям в справке для добавления в список:

Если вы хотите использовать add-to-list' on a variable that is not defined until a certain package is loaded, you should put the call to add-to-list ' в функцию крюка, которая будет запускаться только после загрузки пакета. "eval-after-load" обеспечивает один из способов сделать это. В некоторых случаях другие крючки, такие как крючки основного режима, могут выполнять эту работу.

Другими словами что-то вроде:

(eval-after-load 'auto-complete-config
  '(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict"))

Или, наконец, вы могли бы просто установить переменную после require, но я не уверен, как это взаимодействует с автозаполненной инициализацией.

Ответ 3

.emacs. обычно является elisp файлом, а .emacs.d является каталогом. Похоже, ты относишься к ним наоборот. Вы помещаете

(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(require 'auto-complete-config)
(ac-config-default)

в ~/.emacs, а не .emacs.d.

Или ваш вопрос непонятен. Как выглядит ваш ~/.emacs?

EDIT:

Или вы хотите сделать

(add-to-list 'load-path "~/.emacs.d/ac-dict")
(require 'auto-complete-config)
(ac-config-default)

вместо

(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(require 'auto-complete-config)
(ac-config-default)

У меня есть моя папка .emacs в /home/yo/.emacs, и внутри этого у меня есть папка ac-dic.. внутри этого есть режим С++ mode.lisp mode ruby ​​mode... etc..etc... и т.д.....

~/.emacs должен быть файлом. Не каталог.

но когда я помещаю эти строки внутри своего emacs.d

~/.emacs.d/ должен быть каталогом

Ответ 4

У меня была эта проблема. Это было связано с тем, что я скопировал файлы с автозаполнением с другого компьютера. Чтобы решить эту проблему, я повторно загружаю источники, затем перекомпилирую ее и скопирую в своем .emacs.d cd auto-complete make byte-compile cp *.el *.elc ~/.emacs.d