Skip to content

Latest commit

 

History

History
134 lines (106 loc) · 7.94 KB

dotfile-configuration.md

File metadata and controls

134 lines (106 loc) · 7.94 KB

7 Dotfile Configuration

用户配置可以存储在你的 〜/ .spacemacs 文件中。

7.1 Dotfile Installation

spacemacs 第一次启动,它会问你几个问题,然后在 HOME 中安装 .spacemacs。

7.2 Alternative dotdirectory

一个 dotdirectory 〜/ .spacemacs.d /可以用来代替 dotfile。如果你想使用这个选项,把 〜/.spacemacs 移动到〜/.spacemacs.d/init.el。

也可以使用环境变量 SPACEMACSDIR 来覆盖 〜/.spacemacs.d/ 的位置。当然你也可以使用符号链接来改变这个目录的位置。

注意:〜/.spacemacs将总是优先于 〜/.spacemacs.d/init.el,所以 〜/.spacemacs 不能存在于 〜/.spacemacs.d/init.el 以供 spacemacs 使用

7.3 Synchronization of dotfile changes

要应用在 〜/.spacemacs 中进行的修改,请按 spc f e r。它将重新执行spacemacs初始化过程。

注意:同步将重新执行函数 dotspacemacs/init,dotspacemacs/user-init 和 dotspacemacs/user-config, 根据这个功能的内容,你可能会遇到一些不需要的副作用。例如,如果在 dotspacemac/user-config 中使用切换来启用某些行为,则只要 dotfile 重新同步,就会关闭此行为。为了避免这些副作用,建议使用setq表达式而不是切换功能,或者使用 on 或 off 版本来代替 (spacemacs/toggle-,使用 spacemacs/toggle- 或者 spacemacs/toggle--off)。

可以使用通用参数(spc u spc f e r)跳过执行 dotspacemacs/user-config。

7.4 Testing the dotfile

你可以使用命令 SPC SPC dotspacemacs/test-dotfile 来检查你的 〜/.spacemacs 是否正确。除此之外,这将检查是否可以找到已声明的 layers,以及变量是否具有合理的值。这些测试也会在与 SPC f e r 同步时自动运行。

7.5 Dotfile Contents

7.5.1 Configuration functions

〜/.spacemacs 文件中的三个特殊函数可用于在 spacemacs 加载过程的开始和结束时执行配置:

  • dotspacemacs/layers 在 spacemacs 初始化的启动时被调用,这是您设置 spacemacs 分配和声明 layers 以在您的配置中使用的位置。你也可以添加或排除你选择的包,并调整一些spacemacs加载行为。
  • dotspacemacs/init 在层配置之前的 spacemacs 初始化启动时被调用。除了修改前缀为 spacespacemacs- 的 spacemacs 变量值之外,不应该在其中放置任何用户代码。
  • 在进行 layers 配置之前,在 spacespacemacs/init 之后立即调用 dotspacemacs/user-init。此函数对于在加载包之前需要设置的变量非常有用。
  • dotspacemacs/user-config 在层配置后的 spacemacs 初始化的最后被调用。这是大部分配置应该完成的地方。除非明确指定应在加载包之前设置变量,否则应将代码放在此处。

7.5.2自定义变量

自定义变量配置从 M-x 自定义组内置的 emacs 功能会被 emacs 自动保存在 〜/.spacemacs 文件的末尾。

7.6 Declaring Configuration layers

要使用配置层,通过将它添加到 〜/.spacemacs 的 dotspacemacs-configuration-layers 变量中,将它声明在 dotfile 中。

注意:在这个文档中,一个 used layer 相当于一个 declared layer。

例如,RMS 可以像这样添加他的私有配置 layer:

(setq-default dotspacemacs-configuration-layers
  '(
    ;; other layers
    ;; rms layer added at the end of the list
    rms
  ))

带有 spacemacs 的官方layers 存储在 〜/.emacs.d/layers 中.目录〜/.emacs.d/private 是你的私人 layers 的一个插入位置。如果您告诉 spacemacs 在哪里查找它们,可以将 layers 放在您选择的位置。这是通过在 〜/.spacemacs 中设置列表 dotspacemacs-configuration-layer-path 完成的。例如在 〜/.myconfig 中添加一些 layers,像这样设置变量:

(setq-default dotspacemacs-configuration-layer-path '("~/.myconfig/"))

7.6.1 Setting configuration layers variables

一些配置 laysers 具有配置变量来启用特定功能。比如 git layer 有几个配置变量,可以像这样直接在 dotspacemacs-configuration-layers 中设置:

(defun dotspacemacs/layers ()
  ;; List of configuration layers to load.
  (setq-default dotspacemacs-configuration-layers
    '(auto-completion
      (git :variables
           git-magit-status-fullscreen t
           git-variable-example nil)
      smex)))

:variables 关键字可以方便地保持 layer 配置接近他们的声明。在 dotfile 的 dotspacemacs/user-init 函数中设置 layer 变量也是配置 layer 的完美方法。

7.6.2 Disabling layer services in other layers

通常 layers 可以启用其他 layers 可以使用的服务。例如,如果使用 layers auto-completion ,则每个支持 auto-completion 的其他 layers 都将启用此功能。

有时你可能想要禁用某些特定 layers 中的某个 layers 添加的服务。假设你想在 org 和 git layers 中禁用 auto-completion,你可以用下面的 layer 声明来完成。

(defun dotspacemacs/layers ()
  ;; List of configuration layers to load.
  (setq-default dotspacemacs-configuration-layers
    '(org git
      (auto-completion :disabled-for org git))))

您还可以使用 :enabled-for 构造对除显式标识的那些层以外的所有 layers 禁用它。

(defun dotspacemacs/layers ()
  ;; List of configuration layers to load.
  (setq-default dotspacemacs-configuration-layers
    '(java python c-c++
      (auto-completion :enabled-for java python))))

注意 :enabled-for 可能是一个空的列表。

(defun dotspacemacs/layers ()
  ;; List of configuration layers to load.
  (setq-default dotspacemacs-configuration-layers
    '(java python c-c++
      (auto-completion :enabled-for))))

如果两者都存在, :enabled-for 优先于 :disabled-for 。

7.6.3 Selecting/Ignoring packages of a layer

默认情况下,声明的 layer 将安装/配置所有关联的包。你可能只想选择其中的一部分或忽略其中的一部分。这可以通过:packages关键字来实现。

例如忽略来自 spacemacs-ui-visual layer 的 neotree 和 fancy-battery 包:

(defun dotspacemacs/layers ()
  ;; List of configuration layers to load.
  (setq-default dotspacemacs-configuration-layers
    '(auto-completion
      (spacemacs-ui-visual :packages (not neotree fancy-battery))))

相反的是忽略除neotree和fancy-battery之外的所有软件包:

(defun dotspacemacs/layers ()
  ;; List of configuration layers to load.
  (setq-default dotspacemacs-configuration-layers
    '(auto-completion
      (spacemacs-ui-visual :packages neotree fancy-battery)))

注意:忽略 layer 中的包不同于排除包。排除的包将从您的配置中完全删除,而被忽略的包仅在给定 layers 中被忽略,但可以保留在您的系统上。如果给定的 layers 是包的所有者,那么忽略这个包与排除它是一样的(因为包成为孤立的,所以它被认为是 spacemacs 未使用的)。

7.6.4 Excluding packages

您可以通过变量 dotspacemacs-excluded-packages 排除您不想安装的软件包(有关软件包的更多信息,请参阅配置 layers)。

例如,禁用 rainbow-delimiters 包:

(setq-default dotspacemacs-excluded-packages '(rainbow-delimiters))

当您排除软件包时,下次启动 emacs 或下次点文件同步时,spacemacs 会自动删除它。所有的孤立依赖也被自动删除。不包括一个软件包有效地删除 spacemacs 的所有引用,而不会破坏其余的配置,这是一个强大的功能,它允许你快速删除 spacemacs 的任何功能。

注意:一些软件包对于 spacemacs 正确运行是必不可少的,这些软件包是受保护的,即使它们成为孤立的或被排除在外,也不能被排除或不被拆除。use-package 是一个不能从 spacemacs 中删除的受保护软件包的例子。