2016-03-04 109 views
1

最近,我发现我的emacs启动缓慢。有时启动过程需要30秒,有时需要3秒。我想这与网络环境有关。但是,emacs -q可以始终快速启动。为什么emacs缓慢启动

+1

你可以试试[ESUP(https://github.com/jschaf/esup)(也可MELPA)找到,你的配置文件的一部分减慢启动。 – legoscia

+1

或者只是手动平分你的init文件,找到罪魁祸首。 – Drew

+0

我尝试过使用esup。但是,出现错误“Process * esup-child *使用代码1异常退出”。我的emacs版本是24.5.1,没有GUI。而且,我还发现这个封闭的[问题](https://github.com/jschaf/esup/issues/34)。 –

回答

1

这个问题就像是问“一段弦是多久”。你没有提供足够的信息。首先告诉我们哪个版本的emacs以及你在哪个平台上运行。

您提到emacs -q很快就会启动,所以我们可以假设缓慢是由于init文件导致的。没有分析你的init文件,有很多的可能性,没有办法告诉我们。但是,您可以执行几项操作来帮助找出可能的原因。

@ Drew关于平分你的init文件的评论是一个非常有用的技巧,可以在init文件中找出问题的根源,特别是在试图追踪错误时。当确定主要贡献者加载时间时,这些贡献者可以链接到特定的配置选项或程序包加载等,这对于识别主要贡献者可能是有用的。当问题是包含太多程序包的过度低效的init文件时,它不太有用。

使用@legoscia建议的分析器可以帮助确定需要关注的区域,但仍然有必要解释并理解分析器告诉您的内容。

我建议将

  1. 的附加软件包。自引入package.el和emacs软件包档案以来,我发现有些用户倾向于让一些用户稍微拿走,并安装大量软件包以防万一。运行C-h p并浏览已安装的软件包。如果您不使用任何或您看到不再需要或使用的那些,请将其移除。每个附加软件包(取决于它们的加载方式 - 请参阅下文)会使您的启动时间增加一定量,因为每个软件包都需要加载。加载不需要或不需要的软件包会减慢启动时间。

  2. 你不需要或理解的东西。随着时间的推移,我们的init文件可能随着东西而增长,我们不记得我们为什么添加它,或者它可能是我们从别人那里复制的东西,我们认为我们可能需要和忘记。每隔几个月(取决于你修改init的频率 - 如果你频繁更改频率可能更频繁,如果不频繁更改频率更低)通过init文件并注释掉任何不需要的内容,不理解或不愿意记住你为什么添加它。只是评论一下,不要删除它。重新启动重新启动emacs并查看它是否启动得更快以及您需要/需要的功能或配置设置是否消失。如果有的话,看看你已经注释掉的东西,看看有没有什么相关的东西。当你找到可能的候选人时,试着弄清楚代码在做什么(查看emacs手册,使用Ch f和Ch v或Ch m等来尝试解决它。​​如果它涉及特定的包,请尝试Mx自定义看看是否有内置的定制可能会给你想要的东西即使你喜欢手动定制东西而不是使用emacs内置的定制系统,Mx的定制组是一个很好的方式来找出自定义是由一个包支持,并验证你有变量名正确等

  3. 学习emacs自动加载Emacs有这个非常有用的功能称为自动加载有两种主要的方法加载到emacs包第一个是做一个基本的'require'。这将会寻找一个emacs库,并且会读取它并对它进行评估(就像将文件添加到你的init fi le,所以需要更多的线来评估,这意味着增加init的加载时间)。要求的好处是它只是加载整个文件,并且您知道所有内容都会被评估。坏处是它可能会反过来需要其他文件,这可能需要其他文件,并可能导致更长的初始化时间。为了尝试解决这个问题,emacs拥有自动加载功能。基本上,通过自动加载,你告诉emacs如果它试图执行一个名为'foo'的命令,它必须首先加载(需要)一个你在自动加载定义中定义的特定文件。这里的优点是emacs不会尝试加载库,直到您第一次尝试使用它,因此加载时间没有增加。缺点是它可能意味着第一次使用命令时会出现延迟,如果init的其他部分使用该命令,它将不起作用(嗯,它会起作用,但不会改善加载时间) 。

  4. 切换到use-pckage。有一个非常有用的软件包称为use-package,它可以帮助解决我提到的所有问题。它有助于划分您的配置,简化了一些常见的配置任务,并支持使用自动加载设置包或者延迟加载包直到emacs闲置。它可以帮助加快你的初始化时间,大大提供你正确使用它。强烈建议给它一个去。见https://github.com/jwiegley/use-package