Я получаю сообщение об ошибке при попытке установить 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... что я делаю неправильно??... спасибо!!!
Ответы
Ответ 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