完美的 秒启动 Emacs

EmacsWiki: Emacs Client

以 Windows 系统为例

  1. 将 emacs 环境 添加到终端
  2. 利用终端 emacs --daemon 命令 开启 守护进程 在后台,它会把你的配置完全加载
  3. 找到 emacs bin 安装目录 下的 emacsclientw.exe
  4. 将想要打开的文件类型更换为默认使用 emacsclientw.exe 打开
  5. 这样就会当你使用 emacsclientw.exe 打开任何文件时都会跳转到 同一个窗口 ,不会多开窗口
  6. 请享受 :grimacing:

一些技巧:

  1. 当你使用此方法打开一个文件时,关闭当前窗口时就相当于关闭此 buffer
  2. 如果在同一个窗口打开多个文件buffer时, 关闭窗口时会只关掉最后你打开的buffer,其它buffer不关闭
  3. 默认自动分配 file buffer mode group
  4. 不过好像打开 中文名文件 时 buffer name 乱码,导致无法正确打开 中文名文件

今天才发现这个功能 :sweat_smile:
真的非常非常好用,秒启动就是牛,特别是解决 Windows 系统启动慢的缺点

之前(大概一年前)我发现 Doom Emacs 的 daemon 启动会导致字体设置有问题。自那以来我配置的方向就都是如何减少包、延迟加载包以节约加载时间了。。。

1 个赞

还是尽快加入 linux 的行列吧.

Emacs 确实是在Linux才有最好的体验,因为其它原因还是用回Windows了 :sweat_smile:

我在 10 代 i5 上启动时间只要 0.2 s,基本上是秒启动

emacsclient 坑非常多,不到必不得已真是不想用

1 个赞

mac 上不加载包的话 0.3秒

用emacsclient两年多了,挺好用的

emacsclient 还是有些限制的,我这边光标颜色就和 GUI 的时候不一致。

要用的爽还是直接用 GUI,反正启动一次,也不怎么关闭。

而且经过懒加载优化,Linux 和 macOS 都能控制在 1s 以内启动。 同样配置,在 Windows 系统 3s 左右,具体跟机器性能有关。

我这边使用company补全会错乱, 比较严重.

另外, 颜色主题也有点问题.

emacs-client确实有许多坑,我觉得Windows下可以不用关闭emacs,开着就开着吧反正资源占用很少。

目前Windows的emacs启动时间如下:

用了use-package延迟加载包,当然也用了第三方编译的emacs29(with native-comp with AOT)

https://github.com/kiennq/emacs-build

加载速度和我用wsl1里的emacs -nw差不多,不过wsl1里面的emacs还加载了desktop,windows下如果保存desktop加载时间会变得很长很长。

我不用company,所以可能没遇到。。

我因为terminal下面工作比较多,以前打开一个emacs 就不关了,需要shell的时候用的 emacs下的eshell,asci-term 什么的。用了一段时间还是有点别扭。还是不如terminal 好用。 现在就启动一个emacs daemon 放在后台,cd 什么的还是在 terminal,用emacsclient 打开文件,有点像vim user 那样, terminal 下用screen/rg/fd/bat 之类的工具也挺方便的。 当然我也会留个emacsclient 不关,里面主要是project的coding

补充:我是在linux下

1 个赞

是需要deamon里(server-start),然后其它程序通过emacsclientw -n打开文件那个? 我一直在用,还写个了lua程序自动调用emacsclientw,lua脚本在这里:.emacs.d/emacs-win32-launcher.lua at master · lynnux/.emacs.d · GitHub lua编译好的程序可以在Releases · lynnux/.emacs.d · GitHub 这里下载解压,里面有个emacs-win32-launcher.exe(目前还没有开源)。

使用方法:将emacs-win32-launcher.lua和emacs-win32-launcher.exe放在一起,修改emacs-win32-launcher.lua里的系统判断条件和exe路径。所有需要运行emacs的地方运行emacs-win32-launcher.exe就可以了,支持参数传递。emacs-win32-launcher.exe自带注册功能--install参数给系统添加右键菜单,--uninstall卸载,--debug显示当前系统用于修改emacs-win32-launcher.lua里的系统判断参数(主要目的是可以在多个机子上用,每添加个机子添加判断条件就可以了)。这个方法最早来源于stackoverflow上的vbs启动脚本,写个exe方便点。

图片

PS: emacsclientw我一直没感觉有问题啊,上面说company最近更新新版有图标了好像有时候显示挫位是有点问题,我已经换corfu了。

2 个赞

原来client模式下还会有额外的bug吗?我用了很久倒是没发现什么问题,不过我用的插件比较少。

试试 wsl + archlinux

用emacs --daemon启动后,再用emacsclient打开文件,发现字体和doom theme都没设置上。

如果是正常gui启动emacs,再用emacsclient打开文件是没问题的。

请问这是什么字体?

把字体相关配置,设置到这个函数里面就好了

1 个赞

windows下好像用这个hook还不行

这个字体应该是 MS 专门为Terminal 开发的字体 Cascadia Mono,安装了 Terminal 的话,自带这个字体,不需要单独安装。

这个字体在 Windows Terminal 下的表现真的很好,有不同版本可供选择,而且还有支持 powerline