1 Doom-Emacs用前须知

Doom-Emacs(下面称为Doom)是Emacs的一个比较复杂的配置包,主要目的是使Emacs拥有Vim的出色编辑能力,同时让新手配置起来相对容易些。 但后一个目标几乎是不可能的事情,因为你既要会用Emacs,还要会用Vim,而它们是全宇宙学习难度最高的两个编辑器。

如果这两个编辑器你都没有用过,建议:

  • 分别安装纯纯的Vim和Emacs
  • 按出厂配置(不更改配置不安装插件),学习使用一段时间

就算Doom把Emacs彻底打扮成别人家孩子的样子,Doom也还是Emacs的一个配置包。所以使用Doom的时候还是要求了解Emacs自家的东西多些,对Vim的要求并不高。 Vim相关的内容掌握下面的就可以顺利使用Doom(其实也不少):

  • Vim的模式概念:普通模式、插入模式、视图模式等
  • 模式的切换方法
  • 不同模式下的操作

2 安装和基本配置

2.1 安装

  • Doom要求Emacs版本26.3以上。本人操作系统使用的是Debian稳定版(buster),安装源中提供的版本较低,要从Emacs站点下载源代码编译。看说明编译安装即可,没有什么困难,不赘述。其他依赖的软件如git、ripgrep、find和fd都可以使用Debian官方源安装。
  • 参考项目主页的说明安装Doom就没有问题

       注意:Doom使用Emacs的配置目录“~/.emacs.d”,请把原配置文件移走备份好!

git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.emacs.d
~/.emacs.d/bin/doom install

安装要下载很多软件包,耐心等待完成。

2.2 基本配置

  • Doom的个人配置文件在“~/.doom.d”目录下,原个人配置目录“~/.emacs.d”已被当成Doom的“系统”目录
  • .doom.d目录下初始有三个配置文件
  • init.el
  • packages.el
  • config.el

初次使用可完全不改配置,也可修改init.el文件,注释掉一部分不使用的配置。修改前两个文件都要运行下面命令,做一些“同步”设置:

~/.emacs.d/bin/doom sync

修改“~/.profile”文件,把“~/emacs.d/bin”路径添加到程序路径,方便直接使用doom命令。

NOTE:Doom配置文件的封装有点过份,可修改性太差,老Emacser要是感觉不方便,可考虑 bling/dotemacs (github)作为替代方案。

3 使用方法

3.1 理解Emacs的按键表示方法

  • C-x 表示同时按下Ctrl和x
  • M-x 表示同时按下Meta(Alt或者Esc键)和x键
  • SPC表示空格键
  • S 有时表示SHIFT键(放在连字号前时)
  • RET或者<return>表示回车键
  • TAB或者<tab>表示制表符键
  • 如果不是和控制键联合使用,表示顺序按键
  • C-c ab:表示先同时按下Ctrl和c键,再顺序按下a和b
  • C-c C-c a:表示同时按下Ctrl和c键两次,再按a
  • SPC f s:表示顺序按下SPC、f和s键

3.2 状态(state)切换

Vim的“模式”在Doom中称为“状态”(因为“模式”在Emacs中已有其他意义),是Evil包引入和实现。

  • 默认是普通状态(normal state),可进行vim普通模式下的操作
  • 按Esc键可从其他状态返回普通状态
  • 从普通状态切换到其他状态的按键
  • i:插入状态
  • v:视图状态
  • V:行视图状态(整行选取)
  • C-v:块视图状态(矩形框选取)
  • C-z:正常Emacs状态切换,可在所有模式中使用该按键。“Emacs状态”是没有打扮过的Emacs,该状态下可以使用原生Emacs的编辑方式。

除Emacs状态外,其他状态下的操作参考Vim的使用方法。

3.3 空格键(SPC)使用

  • SPC在Doom的普通状态和视图状态下有特殊用途,它相当于Emacs的Ctrl或Meta命令前缀,用于执行命令
  • 如果按下SPC键后不操作,窗口下方会出现命令提示菜单。

4 常用SPC命令

4.1 SPC f:文件操作

  • f:打开/查找文件
  • d:打开目录(Dired)
  • s:保存文件
  • r:最近文件列表
  • y:拷贝当前文件名(路径)
  • C:大写,拷贝当前文件(询问目标位置)
  • D:大写,删除当前文件
  • R:大写,重命名/移动文件
  • S:另存

4.2 SPC b:缓冲区操作

  • b:缓冲区列表
  • n/[:切换到前一个缓冲区
  • p/]:切换到后一个缓冲区
  • s:保存当前缓冲区(使用命令和 SPC f s 可能不同)
  • S:保存所有缓冲区
  • d/k:关闭当前缓冲区
  • O:关闭其他缓冲区
  • K:关闭所有缓冲区
  • z:隐藏/最小化当前缓冲区
  • Z:关闭所有隐藏的缓冲区

4.3 SPC w:窗口操作

此菜单命令非常多,常用的有:

  • v:垂直分割窗口
  • s:水平分割窗口
  • h/j/k/l:在窗口间移动光标(激活编辑窗口)
  • w/W:向前/后窗口移动光标(比hjkl顺手)
  • H/J/K/L:窗口位置置换/移动命令
  • T:撕开窗口(把当前撕出来,试试就知道什么效果了)
  • q:关闭当前窗口
  • n:和s作用相同
  • m:最大化当前窗口(全部、水平或垂直最大化,有提示)
  • =:等分所有窗口(其他调整大小的命令不大实用,不如自己绑定按键)

4.4 SPC o:打开其他程序/界面

  • p:打开/关闭treemacs目录树
  • T:打开终端
  • f:打开一个新窗口(显示当前缓冲区内容,等于在多窗口中同时编辑一个文件,内容同步!)
  • a:org agenda (SPC a A 等于 SPC o a a)

4.5 SPC t:切换(toggle)

  • l:行号
  • b:字体模式
  • F:全屏模式等

4.6 其他

  • SPC q q:退出程序
  • SPC h:帮助菜单,还有主题切换(SPC h t,不知道为啥放到这里)
  • SPC p:项目操作。本人不习惯此类操作,不介绍。