Doom Emacs 简介
Posted 网易游戏运维平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Doom Emacs 简介相关的知识,希望对你有一定的参考价值。
(网易游戏运维平台)
SteamedFish
SteamedFish,网易特级摸鱼工程师,擅长摸鱼,热爱带薪折腾无用的东西,喜欢磨刀但是不喜欢砍柴。
Doom Emacs 简介
前言
Doom Emacs 简介
-
极端重视速度。使用了大量的手段来确保启动和运行速度尽可能快,使用尽可能流畅 -
不使用任何图形化界面或者需要动用鼠标的工具,而是完全使用命令行进行管理 -
为已经习惯了 VIM 的操作方式,但是希望使用 Emacs 的强大功能的人所设计 -
假定用户是愿意投入时间和精力学习、了解 Emacs 和修改配置的极客,尽可能避免使用复杂的封装隐藏掉 Emacs 内部的机制,并且提供了方便的修改机制,可以自由地进行各种调整
Doom Emacs 的安装
Emacs 的安装
-
macOS 安装 Emacs(假定你使用的是 homebrew 作为包管理器) 1brew tap railwaycat/emacsmacport
2brew cask install emacs-mac
3# 修改 /etc/paths 文件,确保 /usr/local/bin 在 /usr/bin 的前面
4# 避免系统使用 macOS 自带的老版本 Emacs -
ArchLinux 安装 Emacs 1pacman -S emacs
-
Debian 安装 Emacs 如果使用的是 Debian 10,直接安装 Emacs 即可。 1apt install emacs
-
其他发行版 使用该发行版的包管理工具搜索并安装 Emacs 即可。 如果自带的 Emacs 版本太老(推荐使用 Emacs 26.1 以上版本),那么推荐使用 snap、nix、flatapk、LinuxBrew 等第三方包管理器来安装最新的 Emacs 版本。以 Debian 9 使用 snap 为例: 1apt install snapd
2snap refresh
3snap install core
4snap install --classic emacs -
Windows 笔者没有在 Windows 下面使用过 Doom Emacs。
Doom Emacs 的安装
Emacs 的配置文件目录在 ~/.emacs.d/
下面。因此需要将 Doom Emacs 放在这个目录。
由于 Doom Emacs 使用了 ~/.emacs.d/
,修改里面的文件内容会破坏 git 状态,导致后续无法通过 git pull
等方式来更新 Doom Emacs,因此 Doom Emacs 会读取 ~/.doom.d/
目录下面的内容,并且推荐用户使用 ~/.doom.d/
目录来放置进一步的自定义配置。
1# 如果之前已经有配置文件,移走做个备份
2[ -d ~/.emacs.d ] && mv -v ~/.emacs.d ~/.emacs.d.bak
3[ -f ~/.emacs ] && mv -v ~/.emacs ~/.emacs.bak
4# 下载 Doom Emacs 到 ~/.emacs.d 目录,推荐使用 develop 分支
5git clone -b develop https://github.com/hlissner/doom-emacs.git ~/.emacs.d
6# 在 ~/.doom.d 下面创建默认配置文件并初始化 Doom。
7~/.emacs.d/bin/doom quickstart
fonts
目录下面的所有字体并且安装到你系统上,然后跳过字体安装的环节。
Doom Emacs 的基本概念
按键和按键序列
1 of 4
表示一共 4 页)。
可以按
C-h
来翻页。
-
C-g 可以退出没结束的按键序列。 例如你当前已经按下了 SPC f 但是后悔了,可以按 C-g 来取消。 C-g 除了取消按键序列之外,还可以用来取消任何 Emacs 当前正在执行的操作。 如果你的 Emacs 在做一些非常耗时的事情,导致卡住了,你又不想等待,可以狂按 C-g ,一般就好了。 -
SPC 这是 Doom Emacs 最重要也是最核心的前缀按键,绝大多数功能都通过这个前缀按键触发。 建议大家完整翻阅一遍 SPC 这个前缀按键下面的所有功能。 -
g 这是 NORMAL 模式或者 VISUAL 模式下最重要的编辑前缀按键。 例如 VISUAL 模式下 gc 为注释(或者解除注释)当前选中的部分,NORMAL 模式下 gD 为查找光标所在变量的所有引用等。 建议大家分别在 NORMAL 模式和 VISUAL 模式下完整翻阅一遍这个前缀按键下面的所有功能。 -
C-x 为 Emacs 的主菜单,提供的是 Emacs 通用的功能,例如 C-x C-c 为保存并退出 Emacs, C-x C-u 将当前选择的区域变成大写等。 这个菜单里面的功能不会随着当前模式的改变而改变。 -
C-c 为当前模式的菜单,提供的是当前模式特有的功能,例如如果你在编辑 python 文件,那么 C-c < 可以调整 python 代码块的缩进。 这个菜单里面的功能会随着当前模式的改变而改变。 -
C-h 获取帮助。 这个按键的作用和 SPC h 是一样的,但是在 INSERT 模式下面也能用。 例如,如果你想知道在 INSERT 模式下面, TAB 这个按键到底是做什么用的,你是不能使用 SPC h k TAB 的,因为这样是插入了这些字符,但是你可以使用 C-h k TAB 。 -
z 代码折叠、宏等一些小功能。
buffer
frame
window
major mode
.py
扩展名的文件,emacs 会自动设置此 buffer 为 python 主模式。
minor mode
project
bundler
文件的 ruby 仓库等)自动识别为一个 project。
.projectile
来让 emacs 识别这个目录为一个 project。
workspace
session
server 和 client
emacsclient -n filename
来调用 Emacs server 打开文件。这样你系统里面就可以只需要开启一个 Emacs 进程,不需要开很多个。
$EDITOR
环境变量设置成
emacsclient -n
来使得 crontab 等各种编辑都自动打开 emacs。
Doom Emacs 的基本使用
Doom Emacs 的管理命令
~/.emacs.d/bin/doom help
获取所有可用的命令。
常用的命令包括
doom upgrade
升级 Doom Emacs,
doom update
升级所有插件,
doom doctor
检查系统有没有问题。
建议经常执行
doom doctor
检查系统。
Doom Emacs 的基本操作
执行命令
-
大部分命令都可以按空格 SPC 获取 -
也可以使用 M-x 再输入命令名称的方式来执行命令 -
还可以打开菜单栏( M-x menu-bar-mode ),点击菜单来执行命令
获取帮助
-
可以使用 SPC h k < 按键 > 来查看某个按键的具体含义 -
可以使用 SPC h f < 命令 > 来查看某个命令的具体含义 -
可以使用 SPC h I 来查看 Emacs 的所有文档 -
SPC h 按键序列下还有其他大量的帮助命令
编程
-
SPC c 有编程相关的控制,例如 SPC c e 可以执行当前文件 -
SPC m 有编程相关的编辑功能,例如 SPC m I m 可以自动将当前光标所在处的函数所需要的 import
补充好。 -
g 提供了跳转功能,例如 gd 跳转到当前光标所在函数或者变量的所有引用, gf 跳转到当前光标所在位置对应的文件等。 -
可以使用 SPC / 进行查找和搜索,例如 SPC / i 进行函数跳转, SPC / b 在当前 buffer 进行搜索等。 -
使用 z 来做代码折叠。
Doom Emacs 的模块
模块简介
+ipython
,如果打开了 python 模块,并且打开了这个选项,那么除了安装 python 相关的插件之外,还会安装 ipython 相关的插件。
~/.doom.d/init.el
中定义。
你可以在 Doom Emacs 中使用快捷键
SPC f P
来快速打开这个配置文件。
1~/.emacs.d/bin/doom refresh
常用模块说明
Doom Emacs 将模块分成了不同的分组。每个模块都有文档,文档在 ~/.emacs.d/modules/< 分组名 >/< 模块名 >/
下面,建议阅读。
input
输入法相关,目前包含中文和英文输入法。使用C-\可以切换输入法。
completion
自动补全相关。包括:
company 自动补全工具。建议一定要打开。如果使用的是 Emacs 26 以上的版本,建议打开
+childframe
开关:1(company +childframe)
-
helm ivy ido 这三个都是搜索工具,只需要开启一个即可。 这三个工具功能是类似的,不同人有不同的喜好。 本文作者使用的是 ivy,并且开启了 +icons
(显示文件图标)和+fuzzy
(支持模糊搜索) 这两个开关。 ivy 和 helm 都支持+fuzzy
,建议打开,这样就可以模糊搜索啦。开启之后,所有的文件搜索、命令搜索、代码搜索等功能,均会由搜索工具接管。 例如执行 SPC / p 搜索项目时,在最下方的 mini buffer 出现的搜索,就是搜索工具控制的。 如果使用的是 ivy 的话,可以使用 C-n C-p 上下翻页,使用 Enter 选择。
ui
-
doom-quit 在退出 Emacs 的时候弹出随机的提示语。如果嫌烦可以关掉。 -
fill-column 显示提示符,避免一行变得太长(默认在第 80 列显示) -
ident-guides 显示缩进提示 -
pretty-code 将一些符号显示得更「漂亮」,例如把 for i in array
显示成∀ i ∈ array
。装逼用,不改变实际文件内容。这是一个 pretty 之后的效果图
-
treemacs 显示项目的文件树,使用 SPC o p 触发。
这是一个 pretty 之后的效果图
editor
-
evil 打开之后,Emacs 会使用 vim 的编辑模式 -
file-templates 打开新文件时的模板。 -
fold 代码折叠 -
format 代码自动格式整理 -
multiple-cursors 多光标编辑,可以按照规则生成多个光标,输入任何命令在所有光标处生效 -
snippets 快速输入。定义了大量的模板来帮助快速输入一些常见的格式。例如在 python 代码下面 输入 ifmain
然后再敲 TAB 则立刻输出1if __name__ == '__main__'
2 pass并且将光标放在 pass
的位置。所有的模板可以在 https://github.com/hlissner/emacs-snippets 找到,也支持自定义自己的 snippets,使用 SPC s 可以管理 snippet。
emacs
-
dired 文件管理工具,可以使用 SPC o - 打开。 该工具内容极为强大,能写一本书,建议大家自行查阅它的手册,或者打开 Emacs 的菜单( M-x menu-bar-mode ),使用菜单来熟悉它的各项功能。本文作者最喜欢它可以使用正则表达式规则来批量重命名文件的功能。 最基本的使用方法:使用 j k 移动文件, Enter 进入子目录或者打开文件, - 或者 ^ 跳转上一层目录, gr 刷新当前目录内容。 默认 dired 是不会做自动内容刷新的(比如新建了一个目录,要按一下 gr 来刷新才能看到这个目录),可以修改配置让它自动刷新。
-
vc 版本管理工具,会自动识别。在编辑文件时,每一行的状态会在每一行的最左边用色块的方式显示。蓝色表示有修改,绿色表示是新增,红色的小三角表示有删除。使用 C-x v 可以触发它的一些其他功能。
term
-
eshell 使用 emacs lisp 编写的 shell,使用起来和 bash 基本相似,但是不完全相同。在特定场合会比 bash 强大(例如可以直接在命令中内嵌 lisp 函数)。 SPC o E 在新 buffer 中打开, SPC o e 在下方弹出。 -
term 和 vterm,是两个使用 bash 的 shell,使用起来和 bash 完全相同,两个功能完全相同,只开启一个即可,其中 vterm 功能更强大但是安装过程比较复杂。如果要使用 vterm 请阅读模块文档确认如何安装。 SPC o T 全屏打开, SPC o t 在下方弹出。
tools
-
flycheck 语法检查。使用 SPC t f 开关,可以使用 SPC c x 列出所有错误 -
flyspell 拼写检查。使用 SPC t s 开关 -
magit 这是功能非常强大好用的 git 管理工具。 使用 SPC g 触发它的各种功能,其中最重要和最常用的是使用 SPC g g 来显示 git 状态。打开 git 状态之后可以按 h 获取帮助。该工具的手册有几百页,此处无法详细描述,建议大家自行查阅手册和查看帮助。 在使用 SPC g g 打开 git 状态之后,一些常用按键:
-
按 h 获取帮助 -
按 TAB 打开或折叠详细信息 -
按 s 为 stage(相当于 git add) -
按 c 为 commit -
按 q 退出 magit
make 在 Emacs 中快速编译
-
lsp 这是微软推出的 language server protocol。该工具也是一个庞大的主题,可以专门写一篇文章,后续笔者再写一篇文章详细介绍它。
lang
cc 这个模块是一个通用模块,是一个所有类 C 语言的通用模块。可以用于 C/C++/Obj-c 等。
org 这是 Emacs 自带的一个非常强大和庞大的语言。orgmode 的手册有三百多页,功能极多:
-
它是一个类似于 MarkDown 的文档格式,可以转换成各种其他格式 -
它是一个非常强大的管理工具,可以用来管理笔记、日程、日记、财务等各种信息 -
它是一个非常强大的文学编程工具。文学编程绝对是一种可以刷新你三观的独特的编程方法
orgmode 的众多功能之冰山一角:文学编程
org.org
文件并且在 Emacs 中打开它来学习(可以跳过安装和激活的部分,因为 Doom Emacs 已经帮你自动安装和激活好啦)
-
plantuml 这是一个非常强大的画图工具,支持时序图、用例图、甘特图、脑图、网页原型等大量的图形。
-
rest 这是 restful API 的客户端。结合 org 使用效果会非常好,做网络调试很方便。 -
web 编辑 html/css/javascript 等 web 相关的语言。
email
邮件客户端。此处略
app
一些应用。此处略
config
default 这个模块做了一些默认配置,例如各种按键配置等。
其他部分 Emacs 自带的功能
Emacs 的功能实在是太多太多了,介绍不完,这里介绍几个比较好玩一点的
游戏
Emacs 内置多款游戏。可以在菜单的 Tools -> Games 中找到,也可以直接M-x调用游戏名称。
例如,M-x tetris就可以玩俄罗斯方块啦
ediff
-
n p 跳转到下一个或上一个 diff -
a b 将文件 A 的当前 diff 拷贝覆盖到文件 B,或者将文件 B 的当前 diff 拷贝覆盖到文件 A -
q 退出 ediff 模式
calc
-
https://github.com/ahyatt/emacs-calc-tutorials 这里有个 calc 的教程(英文) -
https://github.com/lujun9972/emacs-document/tree/master/calc 这里有几个简短的中文 calc 教程
自定义 Doom Emacs
-
首先按 SPC o - 或者 SPC f d 打开 dired 并且移动到 ~
目录。 -
按 / 搜索,输入 .doom.d
,然后按 Enter (你也可以不搜索而是通过移动光标的方式) 定位到~/.doom.d/
目录 -
按 Enter 进入该目录 -
按 + ,然后输入 modules/mytools/youdao
并按 Enter ,这样就创建了一个目录。如果看不到这个新建的目录,可以按 gr 刷新一下。 -
进入我们创建的 modules/mytools/youdao
目录。按 SPC . 来打开文件列表,输入packages.el
并回车,创建这个文件并编辑。 -
在打开的文件的最后面,追加这样的一行,然后按 :w 或者 SPC b s 保存文件 1(package! youdao-dictionary)
-
再次按 SPC . 来打开文件列表,这次我们输入 config.el
并回车,创建这个文件并编辑。 -
在打开的文件的最后面,追加以下内容,来配置这个模块的行为: 1(use-package! youdao-dictionary
2 :config
3 (map!
4 :leader
5 :prefix ("h" . "help")
6 :desc "Lookup Dictionary" :n "y" #'youdao-dictionary-search-at-point-tooltip)) -
按 SPC f P 然后输入 ini
和 Enter 打开~/.doom.d/init.el
文件。在模块列表最下面增加我们刚创建的模块:1:mytools
2youdao -
按 SPC o t 打开弹出的 terminal(假定你启用了 term 或者 vterm 模块,如果你没有启用这些模块,你需要打开 terminal),然后执行 ~/.emacs.d/bin/doom refresh
-
按 SPC h r r 重新加载配置
进一步学习 Emacs
-
Emacs China 论坛 https://emacs-china.org -
Emacs China Telegram 聊天室 https://t.me/emacszh -
Doom Emacs 官方文档 https://github.com/hlissner/doom-emacs/wiki -
Emacs 的一些中文教程 https://github.com/lujun9972/emacs-document
往期精彩
﹀
﹀
﹀
以上是关于Doom Emacs 简介的主要内容,如果未能解决你的问题,请参考以下文章
Android 逆向类加载器 ClassLoader ( 类加载器源码简介 | BaseDexClassLoader | DexClassLoader | PathClassLoader )(代码片段