20 June 2024

之前有介绍怎么在 macOS 安装使用 emacs 。最近有同学问我怎么在 Windows上顺畅的使用 emacs。那就分享下我的安装过程吧。

首先是下载安装 msys2

从项目主页找到安装文件.exe下载安装 https://www.msys2.org/

假设我们安装到 C:/msys64

然后打开C:/msys64/msys2.exe对程序包进行整体升级:

pacman -Syu

考虑到 msys2 官网建议使用 ucrt64 https://www.msys2.org/docs/environments/

MSYS2 comes with different environments and the first thing you have to decide is which one to use. The differences among the environments are mainly environment variables, default compilers/linkers, architecture, system libraries used etc. If you are unsure, go with UCRT64.

所以我们就用 ucrt64 版本的 emacs。

安装 emacs 以及需要用到的工具:

pacman -S mingw-w64-ucrt-x86_64-emacs       \
       mingw-w64-ucrt-x86_64-librsvg        \
       mingw-w64-ucrt-x86_64-pdf2svg        \
       mingw-w64-ucrt-x86_64-ripgrep        \
       mingw-w64-ucrt-x86_64-ripgrep-all    \
       mingw-w64-ucrt-x86_64-hunspell       \
       mingw-w64-ucrt-x86_64-hunspell-en    \
       mingw-w64-ucrt-x86_64-sdcv           \
       mingw-w64-ucrt-x86_64-mpg123         \
       mingw-w64-ucrt-x86_64-emacs-pdf-tools-server

以上是一些基本工具:

  • librsvg 在 emacs 中显示 svg 图片
  • pdf2svg 在org mode显示 pdf
  • ripgrep,ripgrep-all 文本搜索
  • hunspell,hunspell-en 英语拼写检查
  • sdcv 单词查找
  • mpg123 播放 sdcv 以及fanyi.el查到的单词的读音
  • emacs-pdf-tools-server 在 emacs 中查阅 pdf 文件

如果需要从org mode导出 pdf 还需要以下工具:

pacman -S mingw-w64-ucrt-x86_64-python-pygments \
       mingw-w64-ucrt-x86_64-inkscape
  • python-pygments 导出的 pdf 中代码语法高亮
  • inkscape 通过 latex 导出 orgmode 的时候,把 svg 嵌入到 pdf 中

还需要 texlive ,请另外从 https://tug.org/texlive/windows.html下载 install-tl-windows.exe 安装 texlive 到 C:/texlive

添加以下内容到~/.bashrc以可以使用 latex 工具:

export PATH=$PATH:/c/texlive/windows/2024/bin

开发的同学还可以考虑安装开发相关的工具:

pacman -S mingw-w64-ucrt-x86_64-clang-analyzer  \
       mingw-w64-ucrt-x86_64-clang-tools-extra  \
       mingw-w64-ucrt-x86_64-rust               \
       mingw-w64-ucrt-x86_64-python-lsp-server
  • clang-analyzer, clang-tools-extra 支持C/C++的语法检查和 LSP (Language Server Protocol)
  • rust 支持 Rust 的 LSP
  • python-lsp-server 支持 python 的 LSP

如果还需要文件加解密,可以安装 gpg

pacman -S msys/gnupg

注意,不是 ucrt64 的 gnupg,不知道为何,ucrt64 版本的工作不正常。

然后,获取 emacs 配置文件:

cd ~
git clone --recurse-submodules git@github.com:kimim/kimim-emacs.git
cp kimim-emacs/.emacs .

最后,其他的一些工具还需要额外编译,汉语分词:

pacman -S ucrt64/mingw-w64-ucrt-x86_64-make
pacman -S ucrt64/mingw-w64-ucrt-x86_64-gcc

cd kimim-emacs/site-lisp/cns/
git submodule update --init --recursive
mingw32-make.exe

最后,启动 emacs ,mintty bash命令行中输入 emacs

emacs

等几分钟,emacs 下载好 elpa 上的扩展包,就可以愉快地使用 emacs 了。

此外,还可以考虑把 emacs 固定在任务栏:

  • 右键选择 emacs 图标,选择Pin to taskbar或者“固定到任务栏”
  • 右键点击 emacs 图标,再右键点弹出菜单的 emacs 图标,选择“Property/属性”,然后在“Target/目标”填入:C:\emacs.vbs。这样就不会弹出 CMD 命令行黑色窗口了。
  • 点击“Change Icon…/修改图标”,选择 C:\msys64\ucrt64\bin\emacs.exe 。这样就就能正常显示 emacs 紫色的 logo 。

emacs.vbs 的内容为:

p = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
emacspath = p & "\emacs.bat"
'WScript.Echo emacspath 'get absolute path
CreateObject("Wscript.Shell").Run emacspath, 0, True

而 emacs 的启动脚本为 C:\emacs.bat

@echo off

set HOME=%USERPROFILE%
set MSYS_ROOT=C:\msys64
set MSYS2_PATH_TYPE=strict
%MSYS_ROOT%\\usr\\bin\\env MSYSTEM=UCRT64 /usr/bin/bash -lc "source $HOME/.bashrc && emacs"

这样可以避免弹出 CMD 终端框。

还有一些性能方面的考虑,可以把用户组设置为缓存,这样 emacs 的启动速度和文件读写速度都会快很多。

首先设置缓存:

getent passwd $(id -u) > /etc/passwd
getent group $(id -G) > /etc/group

然后修改C:/msys64/etc/nsswitch.conf删除 db:

# Begin /etc/nsswitch.conf

-passwd: files db
+passwd: files
-group: files db
+group: files

db_enum: cache builtin

db_home: cygwin desc
db_shell: cygwin desc
db_gecos: cygwin desc

# End /etc/nsswitch.conf