Spacemacs

出自 ArchWiki

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 字体 (可选)

Spacemacs 使用的默认字体是 Adobe 的 Source Code Pro。如果您希望使用它,建议在您的系统上安装它。

如果找不到指定的字体,将使用后备字体。

移除 Emacs 配置文件

备份(如果需要)并移除 ~/.emacs 文件(如果尚未移除)。否则,Spacemacs 将无法加载,因为该文件会阻止 Emacs 加载正确的初始化文件。您可以通过重命名来完成此操作

$ mv ~/.emacs ~/.emacs.bak

或者您可以直接移除它,无需备份

$ rm ~/.emacs

首次运行 Spacemacs

现在是启动 Spacemacs 的时候了。

$ emacs

首次启动时,系统会询问您要安装的功能。所有选项都是备选方案,因此在任何情况下都应选择一些选项。这些选择会影响 Spacemacs 的某些行为和快捷键。建议选择默认值,只需按 Enter 键即可。默认值经过了相当的优化,您可以随时更改它们。

提示: 大多数默认软件包提供的功能比备选方案更多。但是,在某些情况下,您可能会发现其他变体更有用(例如,性能和一些特殊功能)。

当您完成提问后,Spacemacs 将下载并安装所有必需的软件包。这可能需要几分钟时间。此时 Spacemacs 看起来可能像是冻结了,但这没关系。

运行 Spacemacs

要启动 Spacemacs,只需运行

$ emacs

当底部栏中不再显示 '...' 操作时,Spacemacs 就可以开始工作了。

注意: 如果启动时间超过 10 秒,请参考下面的故障排除部分。

守护进程模式

Spacemacs 也可以在守护进程模式下启动。守护进程模式允许初始化编辑器一次,然后在以后连接到它,而无需重新读取配置文件。当您有大量的配置文件时,这可能很有用,这样初始化序列只需完成一次。然后您就可以随时立即连接。

要在守护进程模式下运行 Spacemacs

$ emacs --daemon=instance1

然后您可以使用 emacsclient 连接到 instance1

$ emacsclient -nc -s instance1
提示: 您可以运行多个具有不同名称的守护进程

Systemd 模块

本文或本节需要语言、wiki 语法或风格改进。请参阅 Help:Style 以获取参考。

原因: 像博客一样编写,违反了 Help:Style#Language register。(在 Talk:Spacemacs 中讨论)

您可能想要创建一个 systemd 模块来运行 emacs 守护进程。请注意,由于源于社区 ELPA 软件包的安全问题以及其他原因,建议以用户特权的 systemd 用户模块运行守护进程,如此处所述。

创建一个 emacs 用户 systemd 服务文件,例如

.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;

然后执行 daemon-reloadstart 用户 单元 emacs.service

检查以确保没有发生错误。如果您已经在使用作为守护进程运行的 emacs 并遇到错误,我建议 启用 我们刚刚创建的用户 emacs 服务并重新启动。这碰巧解决了我的问题。检查您的用户 emacs.service 单元状态 也可能很有用。然后,如果成功,启用 用户单元 以实现持久性。

完成后,您可以通过 DE 启动器启动 emacs,并享受显著减少的加载时间,但即使在非常强大的系统上,emacs 仍然不会立即打开。如果您愿意,也可以为以下命令创建别名。 "instance1" 也可以重命名,但请确保与服务文件中的守护进程名称匹配。

$ emacsclient -nc -s instance1

用法

对于初次使用者来说,使用 Spacemacs 可能有点棘手,尤其是对于完全的初学者。但是,您的努力将得到回报。只需几个关键概念即可执行基本任务。

您始终可以通过键入 :q[Enter] 退出 Spacemacs

内置教程

您始终可以通过在 Spacemacs 中按下 SPC h T 来运行 Spacemacs 内置教程。

基本概念

前提条件

为了解释基本概念,我们需要一些文本来练习。让我们先生成一些文本。请不要介意现在的命令是否不清楚,您目前不需要了解它们。

  1. 运行 Spacemacs
  2. 按下 SPC b N 以创建新的空缓冲区
  3. 按下 9 SPC i l l 以插入一些文本

您应该看到九行生成的文本作为结果。使用它们来试验下一节中描述的命令。

注意: 当使用 SPC 键序列时,您需要逐个按下按键。因此,您按下 SPACE 键,然后是 b,然后是 N。大写字母应使用 shift 键输入,例如 NShift+n。因此,最终序列将是 SPACEbShift+n
提示: 当您按下 SPC 键时,帮助菜单会出现在底部。您可以在那里查看可用的命令。

现在我们可以更深入地了解名为状态的概念。

编辑器状态

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 行
提示: 数字参数在 Spacemacs 世界中被广泛使用。

还有很多命令需要发掘。基本上,由于 Vim 风格的流程,您可以在 Spacemacs 中导航到任何内容。查看其他资源以获取详细信息。

文本操作

您可以使用以下命令修改文本

  • x - 剪切光标下的字符
  • dw - 剪切光标下的单词
  • dd - 剪切光标下的行
  • yw - 复制(yank)光标下的单词
  • yd - 复制(yank)光标下的行
  • p - 粘贴复制/剪切的文本
  • ra - 将光标下的字符替换为 a

您也可以在那里使用数字参数。

撤销/重做

您可以使用以下命令撤销和重做更改

  • u - 撤销上次更改
  • Ctrl+r - 重做上次更改
插入状态

插入状态用于文本输入。它非常接近常规编辑器的行为。但是,修改文本的能力有限。您需要切换回普通状态才能进行更正。插入状态的颜色为绿色

进入

要进入插入状态,请在普通状态下按 i。您的光标将变为绿色细线。现在您可以输入一些内容。完成后,只需按 ESC 键或 fd 键序列离开插入状态。

有很多方法可以进入插入模式。但是,区别仅与初始光标位置有关。第一次只需知道 i 快捷键就足够了。但还有其他快捷键,一旦您掌握它们,它们将非常有用

  • i - 在光标前进入插入模式
  • a - 在光标后进入插入模式
  • I - 在行首进入插入模式
  • A - 在行尾进入插入模式
  • o - 在下一行进入插入模式
  • O - 在上一行进入插入模式
离开

要离开插入状态,请按 ESC 键或 fd 键序列。您将返回普通状态,并且光标将变为橙色。

可视状态

此状态用于可视文本选择。它允许选择文本块并剪切/复制它们。状态颜色为灰色

要进入可视状态,请在普通模式下按 v 快捷键。然后您可以使用普通模式快捷键进行导航,唯一的区别是:文本选择。光标移动将根据初始光标位置选择文本,您可以稍后 yank(复制)或 delete 它。请记住,您可以使用诸如 vev( 之类的命令来快速选择单词或句子。查看“普通状态:导航”部分以了解其思路。

您也可以按 V 键快速选择整行。

可视块状态

可视块状态是可视状态的更强大版本。它允许在列中选择文本。它类似于常规编辑器和 IDE 上的多光标概念。可以通过按 Ctrl+v 快捷键进入此状态。然后您可以使用 h j k l 键进行导航以查看差异。

在可视块状态下可以完成很多事情。请参考其他资源以获取此信息。此功能在 Vim 术语中称为 vim 可视块模式

缓冲区 (标签页)

Spacemacs 中的文本位于称为缓冲区的区域中。它们与常规编辑器的选项卡非常相似。您可以在缓冲区之间切换并创建新的缓冲区。编辑器本身也使用缓冲区来存储一些您可以稍后查看的信息。

导航

要显示当前缓冲区的列表,请按 SPC b b。您将在底部看到一个新窗口。您可以在此处检查、过滤和导航缓冲区。一些缓冲区已经存在,例如 *Messages* 和 *scratch*。它们由编辑器创建,并包含一些有用的信息。

您可以对底部窗口做的第一件事是在 pattern 字段中键入任何内容。这将过滤缓冲区。如果过滤后没有剩余缓冲区,您可以通过在输入后简单地按“Enter”键来创建一个新的缓冲区。新的缓冲区将被创建并打开。

您也可以手动打开任何缓冲区。按 Ctrl+jCtrl+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 的关键。

还有一些高级选项可用,例如更强大的文件管理器和文件树。它们在 高级 部分中介绍。

内联 (Helm)

内联导航可通过 SPC f f 快捷键使用。它使用的窗口与缓冲区导航窗口非常相似。您可以在此处过滤和选择文件。只需键入任何内容即可缩小结果范围,或按 Ctrl+jCtrl+k 向下和向上移动行。按 Ctrl+l 打开文件或目录,按 Ctrl+h 向后移动。按 TAB 键自动完成输入。

文件管理器 (Dired)

如果您需要更可视化的方法,请按 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 消息传递或集成 Web 浏览器)的层。完整的层列表可以在 文档页面中找到。

一些层已经随 Spacemacs 一起提供,其他层可以手动添加。为此,请打开 Spacemacs 配置文件 (SPC f e d),并在其中找到 dotspacemacs-configuration-layers 部分。然后只需将选定的层添加到列表中并重启 Spacemacs。它将在下次启动时下载所有必需的文件。

当您打开扩展名已知的文件时,Spacemacs 还会提示您安装新层。例如,如果您打开一个 .html 文件,系统会提示您安装 html 层。

您可以通过覆盖 Spacemacs 配置文件中的一些特定于层的变量来自定义层行为。查看相应的层文档以获取详细信息。

文件导航

还有一些用于文件导航的附加工具。它们可能会极大地提高您每天使用 Spacemacs 的方式。

文件树 (Neotree)

您可以通过按 SPC f t 运行文件树。新窗口打开,可通过 SPC 0 访问。标准的 h j k l 导航在那里可用。您可以使用 R 更改根文件夹,并使用 s 切换隐藏文件。使用 c 创建新文件,并使用 r 重命名旧文件。查看 Neotree 文档以获取详细信息。

提示: 如果您需要将根目录更改为更高级别的目录,只需在当前根目录路径(窗口的第一行)上按 R 即可。内联文件导航打开,只需使用 H 向后移动到您需要的程度,然后选择 . 目录即可
文件管理器 (Ranger)

如果您需要功能齐全的文件管理器,那么 Ranger 可能是最佳选择。那里有很多有用的功能,例如即时 h j k l 导航、内联文件预览以及操作文件的能力。它还在一定程度上改进了默认的 Dired 行为 (SPC a d)。安装 ranger 层并使用 SPC a r 运行它。查看 Ranger 文档以获取详细信息。除了自定义选项外,还有许多有用的快捷键。

注意: 如果您在打开 Ranger 时遇到问题,请尝试先关闭 Neotree

窗口

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 . - 进入窗口瞬态状态
提示: 瞬态状态允许您调整窗口设置,例如它们的顺序和比例。只需进入它,所有可用的选项都将显示。

本文或本节需要扩充。

原因: 使用其他常用的 emacs/spacemacs 功能进行扩充。(在 Talk:Spacemacs 中讨论)

配置

本文或本节需要扩充。

原因: 使用 Spacemacs 配置文件的简短描述进行扩充。(在 Talk:Spacemacs 中讨论)

故障排除

启动缓慢

如果启动时间超过 10 秒,则 exec-path-from-shell 模块可能存在问题。可以在 Linux 系统上安全地禁用它。完成以下步骤

  1. SPC f e d 打开 Spacemacs 配置文件
  2. 找到 dotspacemacs-excluded-packages 部分
  3. 在此处添加 exec-path-from-shell 模块,因此最终条目将类似于 dotspacemacs-excluded-packages '(exec-path-from-shell)
  4. 使用 SPC f s 保存更改并重启 Spacemacs

错误的次要模式图标字体

如果您看到 24ba 24c0 符号而不是 ⒺⓀ 或者它们太难看,那么您必须为这些符号安装一个好的 unicode 后备字体,或者通过将 dotspacemacs-mode-line-unicode-symbols 设置为 nil 来禁用它们。

提示: Spacemacs 的一个不错的后备 unicode 字体是 ttf-symbolaAUR

更新软件包时出现大量 "软件包不可用。软件包名称是否拼写错误" 错误

本文或本节已过时。

原因: 这仍然适用吗?建议降级到的软件包不再打包。[1] (在 Talk:Spacemacs 中讨论)

可能与 GNU ELPA GPG 密钥过期有关,运行 : (setq package-check-signature nil) 然后 M-x package-install RET gnu-elpa-keyring-update。如果这不起作用,请尝试回滚到 emacs 26,例如通过 emacs26-gitAUR[损坏的链接:未找到软件包]