Spacemacs
Spacemacs 是一款基于 Emacs 构建、采用 Vim 按键绑定方案的可扩展文本编辑器。该项目旨在融合 Vim 与 Emacs 编辑器的优势,取其精华。Spacemacs 的发行版基于社区驱动的 Emacs 配置,不仅大幅扩展了 Emacs 的默认行为,更增添了诸多额外功能。
安装
安装 Emacs
Spacemacs 是基于 Emacs 构建的,因此我们需要先安装 Emacs。
备份旧的 Emacs 配置 (可选)
若您曾使用过Emacs,请务必备份之前的配置文件。
$ mv ~/.emacs.d ~/.emacs.d.bak && mv ~/.emacs ~/.emacs.bak
安装 Spacemacs
要安装 Spacemacs,我们需要从 GitHub 克隆一个实际配置,并完全替换 Emacs 的配置。
$ git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
安装 Adobe Source Pro fonts (可选)
Spacemacs 默认使用的字体是 Source Code Pro by Adobe. 若需使用该字体,建议在系统中安装。
如果未找到指定字体,则回落到一个可用字体。
移除 Emacs 配置文件
(如果需要)备份并删除 ~/.emacs 文件,否则,Spacemacs 将无法加载,因为该文件会阻止 Emacs 加载正确的初始化文件。你可以通过以下方式重命名它:
$ mv ~/.emacs ~/.emacs.bak
你也可以不备份就删除它:
$ rm ~/.emacs
第一次运行 Spacemacs
下面首次运行Emacs:
$ emacs
第一次你应该被要求选择要安装的功能。所有选项都是可替代的,所以无论如何都必须选择某个选项。这些选择会影响一些 Spacemacs 的行为和快捷键。建议选择默认值,只需按 Enter 键。默认值已经相当优化,你之后可以随时更改它们。
完成配置问答后,Spacemacs 会自动下载并安装所有依赖插件,整个过程可能需要几分钟。期间 Spacemacs 界面看似卡住,属于正常情况。
启动 Spacemacs
直接执行以下命令即可启动:
$ emacs
当底部状态栏不再显示 ... 类加载进度提示时,就代表 Spacemacs 已就绪可用。
守护进程模式
Spacemacs 支持以守护进程模式运行。守护进程模式只会初始化一次编辑器,后续可直接连接进程,无需重复读取配置文件。适合配置文件体量很大的场景,仅需完成一次初始化,之后随时都能快速连接使用。
以守护进程模式启动 Spacemacs:
$ emacs --daemon=instance1
后续可通过 emacsclient 连接 instance1 实例:
$ emacsclient -nc -s instance1
systemd 自启配置
你可以创建 systemd 服务来常驻运行 Emacs 守护进程。出于社区 ELPA 插件安全等因素考量,推荐以普通用户权限配置 systemd 用户级服务,配置方式如下。
新建 Emacs 用户系统服务文件:
.config/systemd/user/emacs.service
[Unit] Description=Emacs text editor Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/ [Service] Type=forking ExecStart=/usr/bin/emacs --daemon=instance1 ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)" Restart=on-failure [Install] WantedBy=default.target
按以下内容修改 Emacs/Spacemacs 桌面入口文件,重点修改 Exec 字段,其余配置仅为界面美化:
/usr/share/applications/emacs.desktop
[Desktop Entry] Name=Spacemacs GenericName=Text Editor Comment=Edit text MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++; Exec=emacsclient -nc -s instance1 %F Icon=/home/[!!! YOUR USER NAME HERE !!!]/.emacs.d/assets/spacemacs.svg Type=Application Terminal=false Categories=Development;TextEditor; StartupWMClass=Emacs Keywords=Text;Editor;
执行守护进程配置重载,再启动 emacs.service 用户服务单元。
检查是否出现运行报错。如果你之前手动配置过 Emacs 守护进程且存在异常,建议启用刚创建的用户服务后重启系统,多数问题都能解决。也可以查看 emacs.service 单元运行状态排查故障。确认正常后,启用该用户服务实现开机自启。
配置完成后,可通过桌面环境启动器打开 Spacemacs,加载速度会大幅提升;即便在高性能设备上,也依旧无法做到瞬时秒开。你可以为连接命令设置别名,instance1 可自定义命名,但必须和服务文件内的守护进程名称保持一致。
$ emacsclient -nc -s instance1
基础使用
初次上手 Spacemacs 会有一定门槛,纯新手尤为明显,但熟悉后收益极高。只需掌握少量核心概念,就能完成日常基础编辑工作。
随时输入 :q 按下回车键,即可退出 Spacemacs。
内置教程
在 Spacemacs 界面中按下 SPC h T,可打开官方内置入门教程。
基础核心概念
前置准备
为讲解基础操作,我们先生成一段测试文本用于实操。暂时不用理解当下的快捷键,只需跟着步骤操作即可:
- 启动 Spacemacs 按下
SPC b N新建空白缓冲区 按下9 SPC i l l自动生成测试文本
执行后会生成九行示例文本,后续所有命令练习都可以基于这段内容操作。
接下来介绍 Spacemacs 核心的编辑模式概念。
编辑模式
Spacemacs 与普通文本编辑器最大的区别就是编辑模式。不同模式下编辑器的按键行为完全不同:比如插入模式可以直接输入文字(和普通编辑器一致),普通模式下所有按键都会被识别为编辑命令,不会输入任何字符。
同一时间只能激活一种模式,熟练切换各类模式是用好 Spacemacs 的核心技能。
当前编辑模式会显示在界面左下角,默认以带数字“1”的彩色矩形标识,颜色对应不同模式。模式种类很多,日常只需掌握常用三种:
- 橙色:普通模式,用于输入命令、光标导航
- 绿色:插入模式,用于文字输入编辑
- 灰色:可视模式,用于选中文本、批量操作也可以通过光标颜色判断当前所处模式。注意:使用 Spacemacs 至少需要掌握普通模式和插入模式。
普通模式
普通模式为默认模式,标识颜色为橙色,主要用于光标导航和执行编辑命令,无法直接输入文字,适合快速移动光标、修改文本内容。
若不小心退出普通模式,随时按下 ESC 键 或 连续按 fd 即可快速返回。
导航
对于基础导航,可以使用以下按键:
-
h- 光标向左移动一个符号 -
j- 光标向下移动一行 -
k- 光标向上移动一行 -
l- 光标向右移动一个符号
你也可以使用单键在单词甚至句子之间进行导航:
-
w- 移动到下一个单词(词首) -
b- 移动到上一个单词(词首) -
(- 移动到当前句子的句首 -
)- 移动到下一个句子的句首 -
^- 移动到行首 -
$- 移动到行尾
要滚动页面,可以使用以下命令:
-
Ctrl+f- 向下翻一页 -
Ctrl+b- 向上翻一页 -
gg- 跳转到文档的第一行 -
G- 跳转到文档的最后一行
你还可以将数字与命令结合使用,使其重复 n 次:
-
5j- 将光标向下移动五行 -
7w- 将光标向前移动七个单词 -
3 Ctrl+f- 向下翻三页 -
20gg- 将光标移动到第 20 行
这里还有很多未被发掘的命令。得益于类似于 Vim 的操作流,基本上你可以在 Spacemacs 中到处导航。请查阅附加资源以获取详细信息。
文本操作
你可以使用以下命令修改文本:
-
x- 剪切光标下的符号 -
dw- 剪切光标下的单词 -
dd- 剪切光标所在的行 -
yw- 复制(拉取)光标下的单词 -
yd- 复制(拉取)光标所在的行 -
p- 粘贴已复制/剪切的文本 -
ra- 将光标下的符号替换为 a
你也可以在此处使用数字参数。
撤销/重做
你可以使用以下命令撤销和重做更改:
-
u- 撤销上次更改 -
Ctrl+r- 重做上次更改
插入模式
插入模式用于文本输入。它的行为与普通编辑器非常接近。然而,其修改文本的能力有限。你需要切换回普通模式才能进行修正。插入模式的颜色为绿色。
进入
要从普通模式进入插入模式,请按 i。你的光标将变为一条绿色的细线。现在你可以输入内容了。完成后,只需按下 ESC 键或 fd 键序列即可退出插入模式。
进入插入模式的方法有很多种。区别在于初始光标位置的不同。初次使用时,只需知道 i 快捷键就足够了。但当你熟练掌握后,以下其他快捷键也会非常有用:
-
i- 在光标前进入插入模式 -
a- 在光标后进入插入模式 -
I- 在行首进入插入模式 -
A- 在行尾进入插入模式 -
o- 在下一行进入插入模式 -
O- 在上一行进入插入模式
退出
要离开插入模式,请按 ESC 键或 fd 键序列。你将返回普通模式,光标将变为橙色。
可视模式
此模式用于可视化文本选择。它允许选择文本块并剪切/复制它们。该模式的颜色为灰色。
要从普通模式进入可视模式,请按 v 快捷键。然后你可以使用普通模式的快捷键进行导航,唯一的区别是:文本选择。基于初始光标位置,光标的移动会选中文本,之后你可以使用 yank(复制)或 delete(删除)它们。记住,你可以使用 ve 或 v( 等命令快速选择单词或句子。请参阅 普通模式:导航 章节以了解详情。
你也可以按 V 快速选中整行。
可视块模式
可视块模式是可视模式的增强版本。它允许按列选择文本。这类似于常规编辑器和 IDE 中的多光标概念。可以通过按下 Ctrl+v 快捷键进入此模式。然后你可以使用 h j k l 键进行导航以查看区别。
在可视块模式下可以做很多事情。相关信息请参阅附加资源。该功能在 Vim 术语中被称为vim 可视块模式。
缓冲区
Spacemacs 中的文本位于称为缓冲区的区域中。它们与常规编辑器的标签页非常相似。你可以在缓冲区之间切换并创建新的缓冲区。编辑器本身也使用缓冲区来存储一些可供稍后检查的信息。
导航
要显示当前缓冲区列表,请按 SPC b b。你将在底部看到一个新窗口。这是你可以检查、筛选和导航缓冲区的地方。那里已经存在一些缓冲区,如 *Messages* 和 *scratch*。它们由编辑器创建,包含一些有用的信息。
你在底部窗口可以做的第一件事是在 pattern(模式)字段中输入任何内容。这将筛选缓冲区。如果筛选后没有剩余的缓冲区,你可以在输入后直接按“Enter”创建一个新缓冲区。新缓冲区将被创建并打开。
你也可以手动打开任何缓冲区。按 Ctrl+j 或 Ctrl+k 在行之间导航。然后按 Ctrl+l 或 Enter 确认选择。选中的缓冲区将被打开。
h j k l 键吗?它们被广泛用于导航。在某些情况下,我们需要使用像 Ctrl 这样的修饰键。这样可以同时进行输入和导航。你也可以使用普通模式中的一些快捷键来控制缓冲区:
-
SPC b b- 列出缓冲区 -
SPC TAB- 切换到上次查看的缓冲区 -
SPC b n- 切换到下一个缓冲区(向前一个) -
SPC b p- 切换到上一个缓冲区(向后一个) -
SPC f s- 将当前缓冲区保存到文件 -
SPC b d- 关闭当前缓冲区
文件
Spacemacs 提供了两种文件导航选项:内联导航和内置文件管理器。内联导航用于 Spacemacs 的确认对话框,与 Shell 非常相似。内置文件管理器更加用户友好,允许检查文件详细信息。掌握每种方式的基础是精通 Spacemacs 的关键。
也有高级选项可用,例如更强大的文件管理器和文件树。这些内容包含在 高级 章节中。
内联
使用 SPC f f 快捷键可使用内联导航。它使用的窗口与缓冲区导航窗口非常相似。你可以在那里筛选和选择文件。只需输入任何内容以缩小结果范围,或按 Ctrl+j 或 Ctrl+k 上下移动行。按 Ctrl+l 打开文件或目录,按 Ctrl+h 返回上一级。按 TAB 自动补全输入。
文件管理器
如果你需要更可视化的方法,请按 SPC a d Enter 运行内置文件管理器。你可以使用 Ctrl+h j k l 键进行导航,并按 Enter 进入目录和打开文件。
有一些可用的快捷键(更多请参考 dired 文档):
-
q- 退出 dired -
R- 重命名文件 -
C- 复制文件 -
+- 创建新目录
高级 章节中的 Ranger。它提供了更多功能,一旦你掌握了它,它可以成为 Dired 的最佳替代品。退出
可以通过 SPC q 退出编辑器,这将显示多种退出方法。
一些可用的方法包括:
-
SPC qf退出当前帧 - 适用于 emacsclient 帧 -
SPC qq退出 Emacs (Kill-emacs) -
SPC qr退出 Emacs 并重启(恢复布局) -
SPC qR退出 Emacs 并重启 -
SPC qd退出 Emacs 并重启(附带 --debug-init 参数)
高级概念
在这一步,你已经能够成功打开文件、进行修改并保存。路已走完一半,现在你可以选择接下来要掌握什么。以下是一些你可能感兴趣的章节。
层
层是 Spacemacs 最强大的功能之一。层是一组软件包和配置选项,能以某种方式极大地扩展编辑器功能。例如,有针对不同编程语言的层,或者提供额外工具的层(如 IRC 消息或集成网页浏览器)。层的完整列表可以在 层 文档页面找到。
有些层已经随 Spacemacs 一起提供,其他的可以手动添加。为此,打开 Spacemacs 配置文件(SPC f e d),找到其中的 dotspacemacs-configuration-layers 部分。然后只需将选定的层添加到列表中并重启 Spacemacs。它会在下次启动时下载所有必需的文件。
当你打开一个已知扩展名的文件时,Spacemacs 也会建议你安装一个新的层。例如,如果你打开一个 .html 文件,系统会建议安装 html 层。
你可以通过在 Spacemacs 配置文件中覆盖某些特定于层的变量来自定义层的行为。请查看相应的层文档以获取详细信息。
文件导航
还有一些额外的文件导航工具。它们可能会极大地改变你日常使用 Spacemacs 的方式。
文件树
你可以按 SPC f t 运行文件树。新窗口将打开,可通过 SPC 0 访问。那里可以使用标准的 h j k l 导航。你可以使用 R 更改根文件夹,使用 s 切换隐藏文件。使用 c 创建新文件,使用 r 重命名旧文件。详情请查看 Neotree 文档。
R。内联文件导航将打开,只需根据需要按 H 返回上一级,然后选择 . 目录即可。文件管理器
如果你需要一个全功能的文件管理器,那么 Ranger 可能是最佳选择。那里有许多有用的功能,如即时的 h j k l 导航、内联文件预览以及操作文件的能力。它还稍微改进了默认的 Dired 行为(SPC a d)。安装 ranger 层并使用 SPC a r 运行它。详情请查看 Ranger 文档。除了自定义选项外,还有许多有用的快捷键。
窗口
Spacemacs 允许你将屏幕分割成独立的窗口。每个窗口都有一个个人编号,可以通过 SPC n 快捷键访问,其中 n 是选定的编号。窗口可以单独分割,因此可以创建复杂的布局。
下面列出了一些窗口快捷键。使用内联帮助(SPC w)获取更多信息。
-
SPC w 3- 聚焦编号为 3 的窗口 -
SPC w s- 水平分割窗口 -
SPC w v- 垂直分割窗口 -
SPC w d- 删除窗口 -
SPC w u- 撤销上次窗口操作 -
SPC w m- 切换窗口全屏 -
SPC w .- 进入窗口瞬态状态 (transient state)
配置
故障排除
启动缓慢
如果启动时间超过 10 秒,可能是 exec-path-from-shell 模块出现了问题。在 Linux 系统上可以安全地禁用它。完成以下步骤:
- 按
SPC f e d打开 Spacemacs 配置文件 - 找到
dotspacemacs-excluded-packages部分 - 在此处添加
exec-path-from-shell模块,最终条目应类似于dotspacemacs-excluded-packages '(exec-path-from-shell) - 使用
SPC f s保存更改并重启 Spacemacs
次要模式图标字体不正确
如果你看到的是 24ba 24c0 符号而不是 ⒺⓀ,或者它们太丑,
那么你必须为此类符号安装一个好的 Unicode 后备字体,或者通过将 dotspacemacs-mode-line-unicode-symbols 设置为 nil 来禁用它们。