2015-10-16 2 views
0

Обычно я помещаю файлы confhelire .el в каталог src для всех видов языков. Такие, как идти, идти conf.el файл:Как загрузить файл конфигурации .el с указанным режимом в emacs

(add-hook 'before-save-hook 'gofmt-before-save) 
(add-hook 'go-mode-hook (lambda() 
         (local-set-key (kbd "M-.") 'godef-jump))) 
(add-hook 'go-mode-hook (lambda() 
         (local-set-key (kbd "M-,") 'godef-jump-back))) 
(add-to-list 'load-path "/usr/local/go/src/github.com/dougm/goflymake") 
(add-hook 'after-init-hook #'global-flycheck-mode) 
(require 'flycheck) 
(require 'go-autocomplete) 
(require 'auto-complete-config) 
(ac-config-default) 
) 
(provide 'go-conf) 

Тогда в init.el, я пишу эту линию

(require 'go-conf) 

Хотя картинг-конф может быть успешно загружен, Emacs запускает медленно. Это потому, что emacs загружает go-conf, открывая все файлы. Я не могу этого терпеть. Лучше, чтобы только при открытии файла Go загрузился go-conf.

я изменить init.el как:

(add-hook 'go-mode-hook '(lambda() 
         (require 'go-conf) 
         (go-conf) 
        )) 

Но он не работает !!

кто может мне помочь?

+0

Нет никакой цели использовать '(add-hook 'after-init-hook #' global-flycheck-mode)' в библиотеке, которая не предназначена для загрузки вообще до тех пор, пока не произойдет ее инициализация. – phils

ответ

2

Ваш код, кажется, предполагает, что весь Emacs имеет только один буфер и режим, в то время как это не так. Например. (add-hook 'before-save-hook 'gofmt-before-save) влияет на все буферы, независимо от того, использует ли они режим go-mode или нет. То же самое для (add-hook 'after-init-hook #'global-flycheck-mode). Emacs разработан таким образом, что вы можете запустить его один раз, а затем редактировать сотни разных файлов одновременно в одном сеансе Emacs. Таким образом, вы, вероятно, следует переписать код по строкам:

(defun my-go-lang-config() 
    (add-hook 'before-save-hook #'gofmt-before-save nil 'local) 
    (local-set-key (kbd "M-.") 'godef-jump) 
    (local-set-key (kbd "M-,") 'godef-jump-back) 
    (add-to-list 'load-path "/usr/local/go/src/github.com/dougm/goflymake") 
    (require 'go-autocomplete)) 
(add-hook 'go-mode-hook #'my-go-lang-config) 

(require 'auto-complete-config) 
(ac-config-default) 
(global-flycheck-mode 1) 

где последние три строки являются частью вашего «родового» конфигурации (не конкретной поддержки для языка Go), а это означает, что вы хотите использовать flycheck и автоматически заполняется всякий раз, когда он доступен, а не только в режиме go-mode.

+0

Стефан, ваше решение в порядке Спасибо ~ _ ~ –

0
  1. Ваш код, чтобы добавить к крючку не работает, потому что крючок запускается только после того, как режим включен, и режим не определен, пока не будет загружена библиотека. Нет смысла загружать одну и ту же библиотеку в режиме.

  2. Если Emacs становится медленным после загрузки некоторой библиотеки, это, вероятно, связано с этой библиотекой. Является ли медленным после загрузки библиотеки, даже если вы не включаете режим?

  3. Вы можете попробовать байт-компиляцию кода библиотеки. Иногда это может иметь большое значение в производительности. Вы можете использовать M-x byte-compile для компиляции заданного файла.

  4. Если компиляция не помогает, и если вы не видите ничего подозрительного в буфере *Messages* (например, предупреждения, которые, похоже, они могут быть уместными), то подумайте о том, чтобы связаться с хранителем библиотеки, сообщить о проблеме и запросить средство ,

+0

1. Я положил «add-hook to (require« go-conf ») в том же положении с« reuqire »go-conf». но только «требуют« go-conf »работать хорошо. 2. emacs становится медленным, потому что golang conf загружен даже я открываю файл php. –

+0

Извините, но я не совсем понимаю ваш комментарий. Возможно, попробуйте перефразировать его, если это важно для вас. (Не 'go-conf.el' библиотека, которая определяет' go-mode'?) – Drew

0

Если go-mode сами уже имеются (скорее всего, загружаются по требованию через дополнение к auto-mode-alist, который, вероятно, позаботился автоматически, если он был установлен как пакет ELPA), и вы просто хотите, чтобы загрузить пользовательская библиотека в то же время, то вы можете использовать eval-after-load:

(eval-after-load 'go-mode 
    '(require 'go-conf)) 

Убедитесь, что родительский каталог для go-conf.el библиотеки в load-path, конечно, иначе require не найти.

+0

Доза не работает. ошибок не сообщается. но go-conf также не загружен. –

+0

При условии, что '(require 'go-conf)' сам по себе определенно работает, тогда, возможно, я догадался о неправильном имени функции для любого используемого вами режима go-mode. (Вы не сказали, откуда вы его взяли, поэтому я не знаю.) Первый аргумент 'eval-after-load' может быть либо символом функции' обеспечивать'd, либо именем библиотеки как строка. – phils

+0

n.b. 'M-x find-function RET go-mode RET' должен привести вас к исходному коду, чтобы вы могли определить, что должен делать этот аргумент. – phils

Смежные вопросы