Я получаю сообщение об ошибке при попытке установить автозаполнение в Emacs - PullRequest
19 голосов
/ 26 ноября 2010

Я новичок в 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's 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..внутри есть режим c ++..список в режиме ruby ​​mode ... etc.etc ... etc .....

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

Ответы [ 4 ]

27 голосов
/ 27 ноября 2010

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

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

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

4 голосов
/ 26 ноября 2010

Я подозреваю, что проблема в том, что 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, но я не уверен, как она взаимодействует с инициализацией автозаполнения.

2 голосов
/ 26 ноября 2010

.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. Внутри есть режим c ++. Режим lisp, режим ruby ​​... и т. Д. ... и т.д .....

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

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

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

0 голосов
/ 01 октября 2014

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

...