我最近购买了一台搭载Mountain Lion系统的新款Retina MacBook Pro,但不幸的是emacs在我的新电脑上启动很慢(大约需要5秒左右)。我尝试安装了最新版homebrew版本的emacs,但问题仍然存在。我没有“.emacs”文件,所以我不知道是什么导致了启动速度变慢。
我可以利用哪些工具来调试并找出emacs启动时花费时间的原因?
我最近购买了一台搭载Mountain Lion系统的新款Retina MacBook Pro,但不幸的是emacs在我的新电脑上启动很慢(大约需要5秒左右)。我尝试安装了最新版homebrew版本的emacs,但问题仍然存在。我没有“.emacs”文件,所以我不知道是什么导致了启动速度变慢。
我可以利用哪些工具来调试并找出emacs启动时花费时间的原因?
看起来你需要为计算机的主机名拥有一个完全限定域名(例如,myretina.local
); 否则,Emacs 启动会很慢。
你可以通过终端验证你的主机名:
hostname
你可以使用它进行设置
sudo scutil --set HostName myretina.local
首先,运行emacs -Q
(这将完全不加载任何启动文件)来查看是否仍然很慢。
你可能需要阅读以下内容,其中解释了Emacs默认会查找的各种可能文件:
C-hig (emacs) Init File
RET
(emacs)
部分?或者使用 M-: (info "(emacs) Init File") RET
。不过如果 emacs -Q
运行缓慢,阅读有关初始化文件的内容也无济于事。你可以尝试 http://emacsformacosx.com/,但这是我的建议极限了,抱歉。 - phils更改主机名对我没有任何帮助。对我起了奇效的是一种看似违反常理的方法,但现在我的emacs可以立即从终端启动。以下是我所做的:
alias emacs=/Applications/Emacs.app/Contents/MacOS/Emacs --debug-init
然而,从图形界面启动仍需要几秒钟,有时甚至需要15秒钟。很奇怪!
在您的设置中,Emacs应该能够立即启动
Mac构建(来自源代码)
% time /Applications/Emacs.app/Contents/MacOS/Emacs --debug-init -eval '(kill-emacs)' -Q
/Applications/Emacs.app/Contents/MacOS/Emacs --debug-init -eval '(kill-emacs) 0.19s user 0.06s system 35% cpu 0.696 total
从emacsformacosx.com下载的NS构建
% time /Volumes/Emacs/Emacs.app/Contents/MacOS/Emacs --debug-init -eval '(kill-emacs)' -Q
/Volumes/Emacs/Emacs.app/Contents/MacOS/Emacs --debug-init -eval -Q 0.17s user 0.08s system 35% cpu 0.691 total
我不使用Homebrew来安装Emacs,但应该是类似的。你确定你没有以某种方式加载非标准包吗?
Emacs 真的有一些非常严重的问题。如果 nameservice 崩溃或路由不正常,或者您的 VPN 隧道关闭等等。
对于我们系统管理员来说,启动 vi 总是一个选项:
# time emacs -debug-init -eval '(kill-emacs)' -Q
real 2m5.177s
user 0m0.029s
sys 0m0.024s
此时vpnc已经停止工作并引起了一些问题(路由和名称服务)。请注意超过2分钟!
使用emacs 30年后仍然不明白为什么它真的需要解析您的主机名。对于锁定文件,有比这更好的选择。
管理数百/数千台机器和虚拟机,并设置单独的主机文件并不是一个真正的答案。手动操作需要花费几天/几周的时间,而自动生成则几乎没有任何用处。
对我来说,通过在/etc/hosts中添加本地主机名和相应的IP地址进行修复
M-x emacs-init-time
命令来确定 Emacs 读取初始化文件所需的时间(如果你使用-Q
参数启动,应该是 0 秒)。此外,你可能想要尝试一下这个优秀的 Emacs 端口,它在 Mac 上运行 flyspell、TRAMP 等功能更快。 - jmdeldinemacs -Q --debug-init
,*Messages*
缓冲区中会有什么内容呢?为了明确起见,你是在控制台还是GUI模式下运行? - jmdeldinhostname
是否设置了完全限定域名,例如myretina.local
(相关信息)? - jmdeldinsudo scutil --set HostName mike.local
解决了问题。如果您写出答案,我会接受它。 - Mike