Windows 上面 Emacs 简易入门最佳实践

最近1年半的时间,我主要都在 Windows平台上面使用Emacs。老实说,Windows对Emacs并不友好,但是并不妨碍正常使用。另外,对于很多使用Windows的朋友而言,把Linux或者Mac作为主要的开发环境仍然有一些困难。原因很多,比如Mac贵,Linux折腾,工作中需要使用Windows等等。

在学习Emacs的过程中,我尝试过Cygwin, Mysys2, Mingw-64等方案,甚至还尝试过在VirtualBox里面安装一个Arch,然后通过共享文件夹的方式来操作Windows上面的项目。

如果电脑配置足够好,在Arch虚拟机里面跑Emacs体验是最好的。但是如果你的项目不能完全摆脱Windows的依赖(比如使用Cocos Creator开发游戏,该工具没有Linux版),那么这种做法就会导致来回在Windows和虚拟机之间进行切换,影响使用体验。

这里主要分享一下在Windows上面简单配置一个相对好用的Emacs的步骤。

  1. 不要再折腾 cygwin和mysys2了,也不要折腾使用 mysys2去从源码编译一个Emacs。网上已经有人把预编译好的Emacs提供给你了,直接拿来主义即可。(抽时间尝试了一下mysys2编译,pacman工具安装软件各种不顺利)
  1. 使用上面的链接下载一个支持 pdump的Emacs版本,同时下载好 emax.7z

  1. 按照上面的提示说明,把 emax64-pdumper-bin-20180619.7z 解压到你的C盘

双击里面的 `addpm.exe` 文件来安装 Emacs:

  • 把下载好的 emax.7z 解压到你的 HOME 目录, 比如: C:\Users\ <username>\AppData\Roaming
  1. 此时你打开 Emacs,会得到一个初始配置。如果你想使用Spacemacs的话,可以把 C:\Users<username>\AppData\Roaming 下的 .emacs文件删除,然后新使用以下命令来安装 Spacemacs:

PS: 这里使用我自己的配置做为演示。

  1. 由于我的配置使用 Github 来管理,所以首先让我们安装 git-for-windows.

https://git-scm.com/download/win

通过上面的链接下载完 git-for-windows后,配置一下 HOME 变量,指向 C:\Users\ <username>\AppData\Roaming

接下来,让我们打开命令提示符,做一些设置。

git config --global core.autocrlf false
git config --global user.email  [email protected]  (替换成你自己的)
git config --global user.name zilongshanren (替换成你之前的)
  1. 此时,我们就可以打开命令提示符,修改当前目录到 C:\Users\ <username>\AppData\Roaming

然后运行下面两个命令来安装 Spacemacs 和 我的个人配置:

;;如果提示 .emacs.d 已经存在,需要先删除 .emacs.d 文件夹
git clone https://github.com/syl20bnr/spacemacs .emacs.d
git clone https://github.com/zilongshanren/spacemacs-private.git .spacemacs.d

接下来,切换 Spacemacs 到 develop 分支(因为master分支很多问题)

cd .emacs.d
git checkout develop
  1. 安装 Source Code Pro 和 ripgrep 搜索工具

字体下载 Source Code Pro regular 双击安装即可,rg.exe 可以放到 C:\Users\ \<username>\AppData\Roaming\emax\bin\ 目录 下面

至此,一个相对好用的 Windows的Emacs环境就搭好了。 可以放心使用 Aspell, helm-ag/rg

推荐再安装 Everything, 我的配置已经集成了 cousel-locate 并且支持中文。

https://www.voidtools.com/

几点说明:

  1. magit在windows平台上面的性能不太好,首次 magit-status 打开一个比较大的 git 项目,可能要2-4s时间,使用 git-for-windows本身对 magit性能有一定的优化,但是还是比较卡。目前没有什么好办法,magit的作者在研究libgit2,据说性能可以得到比较大的提升。

  2. 我目前的配置在intel i7上面是4-5s的启动时间,而我的 amd 2600x 需要10s时间。使用pdumper ,启动时间可以节省到2s,但是pdumper在我这边有一些bug。比如 magit在commit的时候,没办法完成commit,需要在使用 pdumper启动Emacs后,手动调用 SPC f e R 来刷新一下配置。如果有pdumper使用经验的朋友,欢迎分享一下经验。

  3. 对于 org-mode 的配置同步,推荐使用坚果云,我目前的配置是放在 f:\org-notes,把这个目录设置为 坚果云的同步盘即可,Windows和Mac都可以用(Mac下面的目录 是 ~/org-notes) 。

4。 为了使用更爽,避免小拇指受伤,推荐把 caps lock 键改成 ctrl 键,另外,为了方便你的按键跟mac保持一致,推荐以下改键方案:

这套改键方案配合我的配置,可以实现 win+mac的按键体验一致。

附: sharpkeys 安装地址: GitHub - randyrants/sharpkeys: SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key.

20 个赞

官方版的目前还没遇到缺什么的

pdumper 是什么东西,真心理解不了

Aspell肯定是缺的

aspell可以单独安装吧。

我记得作者的编译过程已经集成到官方包了,作者自己称没有必要用他编译的包,直接用官方包即可。

哦,集成到官方包这个事我没注意,感谢告知。

你可以再确认下,26.1的官方Windows 编译过程应该就是 msys2了。

msys2还是要装,有gnu那套里应外合,才能爽起来

没错,现在windows上使用emacs,的确是msys2里最完美,确实有种里应外合的感觉

我文章中提到了emax这个包就有mysys的包,预编译好的,当然安装一个mysys2也是极好的

上文提到的 emax.7z 已经包含一些预编译好的GNU库,当然如果是资深用户,推荐安装 mysys2 没毛病。

貌似一些常用的unix命令行工具没有附带, 作者的建议是安装一个 busybox for windows.

不一样吧, 第一个搞emacs-w64的貌似还是坛子里的 @Chris 这位

这个作者在原有的基础上为windows打了imagemagick和pdf-tools的补丁. 这个官方版里压根没有

后来官方版也很好了 我就没坚持搞下去 我的emacs-w64无非是提高了编译优化的等级 源码还是官方的

推荐使用Source_Code_Pro-YaHei Hybrid.ttf,这个字体将雅黑和Source_Code_Pro合成了,所以设置emacs字体就非常简单了。

给个下载地址?

https://www.fontke.com/font/16269565/download/

不好意思发错位置了,在别的地方想问一下Source_Code_Pro-YaHei Hybrid.ttf怎么在emacs里面设置,不小心发到你的回帖里面了,也正好请大侠解答一下。:joy:

这玩意好,设置中文字体也跟英文一样简单一条命令。

不过我更喜欢这个混搭字体 https://github.com/GitHubNull/YaHei-Consolas-Hybrid-1.12

关键是怎么设置,我在spacemacs不会设置:

dotspacemacs-default-font '("Source_Code_Pro-雅黑 混合体"
                            :size 17
                            :weight normal
                            :width normal
                            :powerline-scale 1.1)
;;;设置出错。
(dolist (charset '(kana han cjk-misc bopomofo))
   (set-fontset-font (frame-parameter nil 'font) charset
                        (font-spec :family "Source_Code_Pro-雅黑 混合体" :size 20)))
;;;虽然能够成功设置,可是英文字体明显不是Source_Code_Pro。

你写的时遇到汉字日文cjk时用此字体。。。注释掉,一条配置就够了

 (add-to-list 'default-frame-alist '(font . "Source_Code_Pro-YaHei Hybrid-12"))