当前位置:  开发笔记 > 编程语言 > 正文

如何让Emacs更快启动?

如何解决《如何让Emacs更快启动?》经验,为你挑选了11个好方法。

我使用Emacs v.22(控制台版本,远程使用PuTTY或本地使用Konsole)作为Linux上的主要文本编辑器.虽然每次启动它都需要一段时间来加载,可能差不多一秒钟,尽管我从来没有计时.我倾向于打开和关闭Emacs很多,因为我更习惯使用Bash命令行进行文件/目录操作和编译.

如何加快启动时间?



1> Trey Jackson..:

其他人已经介绍过使用gnuserveemacsclient,我建议在emacs中进行编译(能够跳转到编译错误是一种胜利).

但是,特别是加速.emacs可以通过以下方式完成:

    字节编译.emacs文件,您可以使用此代码段自动执行此操作

    (require 'package)用自动加载功能替换尽可能多的语句.这将延迟加载lisp直到它实际需要.使用这种技术,我可以将启动速度从> 6秒加速到<1.这需要一些工作,因为并非所有库都被正确标记autoload.

    删除不再使用的代码/功能.

    尝试使用选项运行emacs --no-site-file以避免在站点安装中加载不必要的包site-start.el.

    如果您真的很认真,可以使用已加载的喜爱功能滚动自己的emacs.当然,这意味着更多地参与更改您的内容,.emacs因为它是二进制文件的一部分.请点击链接以获取有关如何使用的信息dump-emacs.

    购买更快的计算机和/或更快的磁盘.

如何确定.emacs加载的内容

现在,您如何找到.emacs加载的内容?目标是删除功能,还是延迟它?检查*Messages*缓冲区,其中包含以下行:

Loading /home/tjackson/.emacs.tjackson.el (source)...
Loading /home/tjackson/installed/emacs/lisp/loaddefs.el (source)...done
Loading /user/tjackson/.elisp/source/loaddefs.el (source)...done
Loading autorevert...done
Loading /home/tjackson/.emacs.tjackson.el (source)...done

如果您注意到,Loading语句可以嵌套:第一个.emacs.tjackson.el结束,...最后一行显示.emacs.tjackson.el加载...done.所有其他文件都从我的.emacs.tjackson.el文件中加载.所有其他负载都是原子的.

注意:如果您有一个大的.emacs,*Messages*缓冲区可能会丢失一些消息,因为它只保留固定数量的信息.您可以尽早添加此设置.emacs以保留所有消息:

(setq message-log-max t)

注意:'load如果消息的第四个参数nomessage是非零,则命令将禁止消息,因此删除任何此类调用(或者,建议'load并强制使用第四个参数nil).



2> Török Gábor..:

除了Adam Rosenfield的解决方案,我建议在服务器模式下使用Emacs.你可以添加(server-start)到你的dotemacs,而emacsclient不是emacs每当你想在Emacs中打开文件时运行.这样,您只需支付一次Emacs的装载成本,然后客户端立即弹出.

编辑

你是对的,v22不会创建一个新的框架.创建一个可以解决这个问题的shell脚本:

#!/bin/bash
# Argument: filename to open in new Emacs frame
/usr/bin/emacsclient -e '(let ((default-directory "`pwd`/")) (select-frame (make-frame)) (find-file "'$1'"))'



3> hiena..:

每次要使用shell时都不要关闭Emacs.使用Ctrl-Z将Emacs移动到后台,使用fgBash中的命令将其移回前台.


+1尼斯试图避免这个问题.您可以添加另一个`putty`会话和/或运行`screen`到您的答案.Chris Conway的"Mx shell"答案也是这种精神.

4> stsquad..:

一些提示:

    使用自动加载

    使用自动加载可以使您免于加载库,直到您使用它们.例如:

    (if (locate-library "ediff-trees")
        (autoload 'ediff-trees "ediff-trees" "Start an tree ediff" t))
    

    编译你的.emacs

    如果您使用版本控制并且.emacs比.emacs.elc更新,则会有轻微的速度提升.一个常见的技巧是:

    (defun autocompile nil
      "compile itself if ~/.emacs"
      (interactive)
      (require 'bytecomp)
      (let ((dotemacs (file-truename user-init-file)))
        (if (string= (buffer-file-name) (file-chase-links dotemacs))
          (byte-compile-file dotemacs))))
    
    (add-hook 'after-save-hook 'autocompile)
    

    学会爱上emacs服务器.

    将emacs作为服务器运行意味着永远不必关闭它.但是我注意到你仍在使用emacs22.emacs23支持multi-tty,这使得在一个屏幕会话中运行emacs,然后在另一个终端中启动新窗口变得更加容易.我使用emacs编辑邮件客户端(mutt)的邮件,而emacsclient对于这些快速编辑非常棒.



5> Chris Conway..:

之一

M-x shell
M-x eshell
M-x term
M-x ansi-term

应该满足您在Emacs内的命令行需求.

您也可以使用M-!(aka M-x shell-command)执行单行程序而不必删除shell.



6> Adam Rosenfi..:

检查您的.emacs文件,看看您是否正在加载不必要的包.加载包可能会花费大量时间.例如,php-mode如果您正在编辑PHP文件,则可能只想加载包.你可以通过安装一个钩子程序来做到这一点,虽然我不确定细节.

还要确保您正在加载的任何包都已编译(.elc文件).您可以elisp通过运行来编译文件

emacs -batch -f batch-byte-compile thefile.el

编译包的加载速度比未编译的包快得多.



7> Rook..:

"我倾向于打开和关闭emacs,因为我更习惯使用bash命令行进行文件/目录操作和编译."

你正在描述像vim这样的编辑器的使用方式.拍摄进出.Emacs通常是开放的,大多数都是从"内部"完成的.希恩已经回答了这里正确的做法.


你可以用Cz暂停它,而不是退出emacs,然后用fg唤醒它...
@Damien Pollet - (困惑),...嗯,是的,我知道这一点.我没有想到重复已经说过的话,所以我只是指着hiena的帖子.

8> Vicky Chijwa..:

最快的方法是分析您的.emacs.在我发现我的.emacs中的4条特定线占用了超过80%的加载时间后,我在5分钟内将加载时间从> 3s减少到1s.



9> Jacob Gabrie..:

.emacs除了autoload(正如其他人所建议的)之外,有助于减少我的加载​​时间的一件事是eval-after-load.在下面的例子中,延迟将呼叫sql-set-product从具有加载节省你sql在你的.emacs,使得等植物学sql自动加载更有效.

(eval-after-load "sql"
  '(progn
     (sql-set-product 'mysql)
     (setq sql-mysql-options '("-C" "-t" "-f" "-n"))
     (setq sql-sqlite-program "sqlite3")
     ))

当然,对于某些软件包,会有一个可用的钩子,你可以做同样的事情,但有时候没有,或者这种方式证明更容易思考.



10> slu..:

Emacs旨在"始终"(或至少长时间)运行,因此不建议在一天内多次启动和停止Emacs.

我建议使用屏幕.屏幕是终端多路复用器,在一个终端中为您提供无限的虚拟终端.

安装完成后,只需在终端中输入"screen emacs"即可.Emacs将照常启动,但按"ca c"(即按ctrl-a然后按c)将打开一个新的虚拟终端.你可以按"ca ca"(这是ctrl-a的两次)回到emacs.

您甚至可以从正在运行的屏幕会话中分离,键序列为"ca d".

通过发出"screen -R"重新附加到会话,您将返回到您离开的位置.这使您可以在工作中启动emacs会话,分离,回家以及从家中重新连接.

我连续几个月一直在运行这样的Emacs.

这是官方网站:http://www.gnu.org/software/screen/但是尝试谷歌搜索屏幕教程和howtos



11> David Holm..:

您可以使用benchmark-init来配置您的Emacs启动.它将跟踪正在加载的模块以及每个模块花费的时间.结果可以以表格形式或树形式呈现.树可以更容易地跟踪谁加载了什么,这在加载具有大量依赖关系的包时会很有帮助,并且列表形式可以帮助您快速找到大部分时间花在哪里.

获得这些结果后,尝试确定是否必须一直加载所有模块,或者是否可以按需加载其中一些模块.例如,在我的配置中,我只加载特定于某些模式的Emacs扩展,当该模式实际被激活时,因为大多数时候我只在会话中使用它们的一小部分. eval-after-load和mode hooks将成为你的朋友.

通过应用此方法,我的Emacs在3-4秒内启动,并且我安装了近200个扩展.大部分时间用于加载Helm,我总是加载它,因为它取代了始终需要的find-file和其他核心功能,以及CEDET,因为我使用最新版本并且必须在Emacs尝试加载旧版本之前加载它内置版本.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有