/.emacs.d

My Emacs configuration

Primary LanguageEmacs Lisp

Emacs 从头开始

今天读了一篇文章 怎么学习 Emacs ?如何达到真正融汇贯通的境界?

为什么我一直都不能利用 Emacs 让我的工作变得更快速?不像许多大神据说的, Emacs 让工作和开发效率提高?

这一切的原因都是因为对 Emacs 的理解太少了,但是按照大神的方案来看的貌似有点难,毕竟是 1241 页英文文档。

没办法,在英文面前,我又一次摔倒了。但是我对现在的 Emacs 配置有了一个新的想法,也许我不应该再过多的依赖别人的配置了。

试用了一天的 Emacs 之后,感觉自己的小指要断了,看来,对于 Emacs 来说,小指的负担还是太重了。

知道自己想要的功能

在使用了一段时间之后,我发现我其实经常使用的功能就是几个。

笔记
用来记录自己要做什么,在做什么,做过什么的地方
计划
记录自己的工作或者一些生活上的思考
博客
将遇到的问题的解决方法做成笔记,发布到 GitHub 上
开发
主要写 Python 和 Web 相关的代码

再经过一段时间的使用之后,对于我来说,最需要的 package 就是:

Org Mode
记笔记,做计划,写博客 (配合 ox-hugo) ,等所有的内容,都可以使用。
Magit
开发的时候做代码管理,可以说是非常好用的一个功能,几乎是 Emacs 神器。
Org Roam
快捷笔记方式,用来更好的规划自己的任务。从这一刻起,真正将 Emacs 用为自己的工具。
projectile
项目快速切换,修改配置、开发工具时使用都非常频繁。

所以在这次从头开始的配置中,第一个需要的就是 Org Mode + Org Roam + Magit。

所有使用到的配置和快捷键

删除一些长时间未使用、非基础的配置,同时调整一些配置代码的位置,整合一些配置文件中的内容。

core

此配置下主要是一些必须的设置、工具配置和许多个人比较喜欢使用的工具。

basis

将 core-variable 的内容合并到 core-basis 中。basis 仅用来配置公共变量和基础设置的内容。

M-S-<return>
toggle-frame-fullscreen 全屏界面
M-s-<return>
toggle-frame-maximized 最大化窗口
C-=
er/expand-region 扩展选择区域

package

配置 use-package 包,并增加一些基础包引入,同时将 general 调整到此配置下,用来配置基础的快捷键。

keybind

合并 evil 和 general 配置方案。

使用 general 定义 leader key [SPC]

fs
save-buffer
fd
dired
bq
kill-buffer
qq
save-buffers-kill-emacs
wq
delete-window
wu
winner-undo
wr
winner-redo
wo
other-window
wv
split-window-vertically
w-
split-window-horizontally
wl
evil-window-right
wh
evil-window-left
wk
evil-window-up
wj
evil-window-down
wa
delete-other-windows
1~0
winum-select-window-[1~0]
ov
cfw:open-org-calendar

counsel

leader key SPC

:
counsel-M-x
sS
swiper-all
ss
swiper
ff
counsel-find-file
fr
counsel-recentf
bb
counsel-switch-buffer
cg
counsel-git-grep
cr
counsel-rg

org mode

增加引用最新版本的 org mode,不再是使用 Emacs 自带的版本。

leader key SPC o

a
打开 agenda
b
在 org buffer 间切换
c
启动 org-capture
d
在当前位置插入子标题
e
org-deadline
h
counsel-org-clock-history
o
设置 org 的标签
p
org-pomodoro
s
org-schedule
t
设置 TODO 状态
x
counsel-org-clock-context
E
org-export-dispatch
R
org-clock-report
C-o
org-open-at-point 打开当前位置的链接
.
org-clock-in
,
org-clock-out
&
org-mark-ring-goto ,从链接跳转回原来的位置
`
org-time-stamp,插入一个「激活」时间戳,可在 Agengda 中看到
!
org-time-stamp-inactive,插入一个「非激活」时间戳

plantuml

增加专门为 plantuml 所使用有配置。Plantuml 主要用来绘制流程图、思维导图等许多图例。

yaml/toml

增加一些文件编辑对应的引用包,用来编写笔记和配置文件

org roam

org-roam 工具调整到 core/ 下,作为常用的工具,一直启用。

使用 Org Roam 进行任务规划、记录笔记等内容,替换部分 org capture 的内容。

SPC n l
org-roam-buffer-toggle 查看对应的反向链接的文章
SPC n f
org-roam-node-find 查找所有 roam 中的文件,可以查看文章的标题(title)和 Alias 的内容
SPC n g
org-roam-ui-mode 打开查看生成的文章关系网
SPC n i
org-roam-node-insert 将某段内容更新为关联关系
SPC n c
org-roam-capture 新增文件或者继续插入内容
SPC n r
org-roam-ref-add 增加对应的参考
SPC n a
org-roam-alias-add 增加别名
SPC o g
org-id-get-create 增加 Org ID
SPC n t
org-roam-tag-add 增加标签
SPC n j
org-roam-dailies-capture-today 新增本日、本周、本月对应的内容,用来增加任务单
SPC n k
org-roam-dailies-goto-today 跳转到本日、本周、本月的文件
SPC n n
org-roam-dailies-goto-next-note 跳转到下一篇内容,如果是日则是下一天,周则是下一周
SPC n p
org-roam-dailies-goto-previous-note 返回上一篇内容,如果是日则是上一天,周则是上一周
SPC n s
org-roam-db-sync 刷新存储的关系,解决 org-roam-ui-mode 生成的关系图不同步问题

org dailies

使用快捷键 SPC n j 或者 SPC n k 后输入下面的模板编号,可以使用对应的模板。

w
周计划
m
月计划,阅读清单
j
季度 OKR

月计划主要分为 2 类,一类是 关键任务 主要指需要完成的任务和工作;另一类是 阅读计划 主要是针对每类任务,需要阅读的文章或者书籍。

计划任务
在每个季度完成 OKR 的设计,按方向分为几类,然后按 OKR 将任务保存到月计划中。每个计划工作时,更新到周计划内,开始任务统计。
阅读计划
将需要阅读的书籍或者文章先放到月计划的阅读清单中,阅读完成之后,将清单更新到每年的阅读清单中。阅读计划主要包括书名、作者、完成时间、阅读渠道,如果有对应的笔记,则建立 roam 的链接。阅读渠道主要有微信读书、实体书、电子书三类。

modules

Magit

SPC g g
启动 Magit

company

M-/
company-complete
C-p
company-select-previous
C-n
company-select-next
<tab>
company-complete-common-or-cycle

treemacs

leader key SPC t

c
treemacs select window
t
treemacs
b
treemacs bookmark

projectile

SPC p
projectile command map
SPC p p
counsel-projectile-switch-project
SPC p /
counsel-projectile-grep
SPC SPC
counsel-projectile-find-file

calendar + cal-china-x + calfw

使用 Calendar 和 cal-china-x 来设置需要提醒的日期,防止自己忘记。

引入 calfw 包来展示相关的日历,除了具体的日期外,还可以增加展示 org-agenda 中的内容。

lsp-mode + dap-mode + lsp-ui + lsp-language-server

不再使用 Emacs 作为开发平台,仅作为完全的笔记平台。

使用 lsp-mode 作为程序补全的工具,主要使用 PythonJavaScript/TypeScript 开发项目。

开发语言后台

目前仅使用 pyright 语言。后续增加前端相关配置。

Python
npm install -g pyright
JavaScript/TypeScript
npm install -g typescript-language-server typescript 启动后台: typescript-language-server --stdio
HTML/CSS
npm install -g vscode-langservers-extracted

debug

使用 dap-mode 对开发做测试和 debug 。

字体配置

由原本的 all-the-icons 和 Iosevka ss14 字体,修改为 Iosevka nerd 字体。

  • 英文:Iosevka Nerd Font Mono 14
  • 中文:华文仿宋 14
  • 英文:Iosevka Nerd Font Mono 14
  • 中文:微软雅黑 14
brew tap homebrew/cask-fonts
brew install font-hack-nerd-font