仿 Centaur Emacs 的个人配置.
git clone --depth 1 https://github.com/condy0919/.emacs.d ~/.emacs.d
仅包含C/C++/Rust/OCaml/Haskell相关配置,且全线使用lsp
。当前由于
ocaml-lsp
十分难用,haskell-ide-engine
水土不服,故这2个语言没有采用lsp
。
保持着尽量使用Emacs
自带功能的原则,能用自带的就用自带的。
hunspell
拼写检查,目前仅在git-commit-mode
下启用languagetool
更好的拼写检查、语法纠错工具rg
更快的grep
cmake
编译vterm
的模块、c++
项目的构建工具git
这个就不用说了吧?gcc
这个就不用说了吧?
最基础的配置包含了那些在所有mode
下都不会变更的配置,包含了:
包名 | 功能 |
---|---|
align | align-regexp 可以自动对齐选择的符号 |
autorevert | 当文本被其他编辑器修改后,可自动更新 |
delsel | 选中文本可以直接覆盖着写,一般编辑器都默认开这个功能 |
hl-line | 高亮当前行 |
paren | 高亮匹配的括号 |
saveplace | 自动记录上次打开文件的位置 |
simple | 在modeline 里显示行号、列号以及当前文本的大小 |
so-long | 打开长行的文件不再痛苦 (Emacs 27+ 自带) |
而这几个包也是Emacs
自带的。
为了保持界面的整洁,禁用了菜单栏、工具栏和滚动条。
在跳转之后会闪烁一下当前行,这样就比较容易知道当前光标在哪里了。这个功能也是基于
自带的pulse
。
选用use-package
来管理插件。对于elpa
, melpa
里没有的包,使用straight.el
辅
助下载。straight.el
在自举过程中会连接githubusercontent.com
这个域名,此域名在
国内访问几乎不可达,建议bypass
之。
而自动升级选择了auto-package-update
。
使用了doom-themes
和doom-modeline
,简直惊艳!doom-one
的界面非常好看!
which-key
, rg
是比较常用的工具。更有projectile
管理项目,让项目编译、测试、
运行变得更加方便。而且还有counsel-projectile
的加成,在原有projectile
的基础上
又添加了许多ivy action
,更一步提升了便捷性。
avy
用来代替vim-easymotion
。而且avy
还提供了goto-line
的功能,这下都不用开
relative line number
来8k
9j
这样跳了。
自然ivy
,counsel
是要上的,补全功能太好用了。没有counsel
加持的M-x
根本无法
让人按下去。这里没有使用swiper
是因为它下方占用空间过大(继承于ivy
的设置),搜
索时肯定是比较在意上下文,而一个swiper
就占用了ivy-height
行就显得有点奢侈。而
自带的isearch
在稍加设置之后,效果也还可以接受。当evil-search-module
设置成
isearch
后,也可以使用相同的快捷键来触发ivy-occur
。再加上ivy-occur
可以与
wgrep
配合,将原来的「搜索、打开对应文件、修改」变成了「搜索、修改」。
vterm
作为一个与原生终端更加接近的终端模拟器,单就外观来看已经比Emacs
自带的
eshell
好看。再加上shell-pop
的辅助,美观又实用的terminal
模拟器就出现了。
Emacs
下的markdown-mode
让人惊艳,突然觉得写文档也会这么快乐。与之相辅相成的还
有separedit
,让人在代码里写documentation comments
不再烦恼。
从neovim
迁移过来的我,自然是常开evil-mode
,相关的evil
套件有:
- evil-leader
- evil-nerd-commenter
- evil-surround
- evil-magit
normal
状态下增加了如下键绑定:
key | function |
---|---|
gs | evil-avy-goto-char-timer 来跳转到目标字符 |
go | evil-avy-goto-word-or-subword-1 来跳转至目标单词处 |
gl | evil-avy-goto-line 来跳转到对应行 |
avy
真乃神器也!
key | function |
---|---|
M-; | evilnc-comment-or-uncomment-lines 注释与反注释 |
C-c ' | 通过separedit 在注释中快乐地写代码 |
C-c x | 调用quickrun 来运行当前buffer 内的代码。eval 快人一步! |
M-= | 在下方弹出一个vterm 终端 |
C-c p | projectile 调用前缀,方便地在项目内跳转、编译等其他功能 |
C-c t o | hl-todo-occur 查找当前buffer 内的TODO/FIXME等关键字 |
C-c t p | 上一个高亮的关键字 |
C-c t n | 下一个高亮的关键字 |
C-x g | 呼出 magit |
C-M-; | 在git-commit 时会有flyspell 检查单词是否错误,通过此按键自动修正 |
M-o | 原生C-x o 来切换window 有点反人类,绑定在单键上就可以快速的切换至其他窗口了 |
C-c [ | 调用align-regexp 提供以一个对齐符号的功能 |
C-c i l | 方便地插入SPDX 形式的license 头部 |
更详细的按键绑定请直接看代码. :-)
- 显示行末空白字符
- 高亮TODO FIXME等关键字
dumb-jump
作为lsp-find-defition
失败后的备份手段magit
作为git
客户端hideshow
来显示/隐藏结构化的代码块,如 "{ }" 函数体等rmsbolt
作为一个本地的 Compiler Explorer 相比于godbolt
友好一点quickrun
作为一个能够执行部分区域内的代码块,方便快速验证函数功能
- clangd
lsp-mode
- 禁用了
flycheck
,因为gcc/clang/cppcheck
的checker
无法正确包含头文件的路径
- rls
lsp-mode
默认
- 启用
merlin
作为补全后端
- 使用
dante
- 自己博客文章的查找、新建
- 插入
SPDX
形式的license
头功能已独立license.el - 将常用的功能键绑定在
leader
键上