通常,我将sug文件中的confugire .el文件放在各种语言中。比如Go,go-conf.el文件:
(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)
虽然go-conf可以成功加载,但emacs启动缓慢。这是因为emacs加载go-conf无论打开什么文件。我不能容忍它。 最好只有在打开Go文件时才会加载go-conf。
我将init.el修改为:
(add-hook 'go-mode-hook '(lambda ()
(require 'go-conf)
(go-conf)
))
但它不起作用!!
谁能帮助我?答案 0 :(得分:2)
您的代码似乎假设整个Emacs只有一个缓冲区和模式,而事实并非如此。例如。 (add-hook 'after-init-hook #'global-flycheck-mode)
影响所有缓冲区,无论它们是否使用go-mode。 (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)
也是如此。 Emacs的设计使您可以启动一次,然后在一个Emacs会话中同时编辑数百个不同的文件。所以你应该按照以下方式重写你的代码:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= content_for?(:title) ? yield(:title) : "My App" %></title>
<meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Levi''s Vet Clinic" %>">
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %>
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
<%= csrf_meta_tags %>
</head>
<body>
<div id="wrap">
<div id="main" class="container clear-top">
<%= render 'layouts/navigation' %>
<div id="push">
<%= render 'layouts/messages' %>
<%= yield %>
</div>
</div>
</div>
</body>
<footer class="footer">
<%= render 'layouts/footer' %>
</footer>
</html>
其中最后三行是“通用”配置的一部分(不是特定于Go语言的支持),这意味着您希望在可用时使用flycheck并自动完成,而不是仅在go-mode中。< / p>
答案 1 :(得分:0)
要添加到挂钩的代码不起作用,因为挂钩仅在模式打开后运行,并且在加载库之前未定义模式。在模式挂钩中加载相同的库是没有意义的。
如果在加载某些库后Emacs变慢,则可能是由于该库。即使您没有打开模式,加载库后速度是否很慢?
您可以尝试对库代码进行字节编译。这有时会对性能产生很大影响。您可以使用M-x byte-compile
编译给定文件。
如果编译没有帮助,如果您没有在缓冲区*Messages*
中看到任何可疑内容(例如,似乎可能与之相关的警告),请考虑联系图书馆维护人员,报告问题并要求补救。
答案 2 :(得分:0)
如果go-mode
本身已经可用(很可能是通过添加到auto-mode-alist
按需加载,如果它是作为ELPA包安装的话可能会自动处理),并且你&#39 ;只是想要同时加载您的自定义库,然后您可以使用eval-after-load
:
(eval-after-load 'go-mode
'(require 'go-conf))
确保go-conf.el
库的父目录位于load-path
,当然,require
无法找到它。