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  guanghui8827@gmail.com  (替换成你自己的)
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 搜索工具

https://fonts.google.com/specimen/Source+Code+Pro?selection.family=Source+Code+Pro

字体下载 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 安装地址: https://github.com/randyrants/sharpkeys

16赞

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

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"))