此仓库储存了 GNU/Emacs 的基础用法和工作室成员的个人经验.
注意: 多练习而不只是看着这些句子, 它能帮助你更快地学习!
注意x2: Emacs 文档是你的好朋友, C-h f
是函数文档, C-h v
是变量文档, C-h k
是快捷键文档.
感谢所有为本仓库做出贡献的贡献者! (排名按照贡献的时间顺序排列)
贡献者 | Emacs 配置文件仓库 |
---|---|
KiteAB | .emacs.d |
贡献者们必须浏览 todo.org 再修改文件.
在 Emacs 中, 我们有一条规定:
快捷键 | 意义 |
---|---|
C-<字符> | 在输入 <字符> 时按住 Control |
M-<字符> | 在输入 <字符> 时按住 Alt |
s-<字符> | 在输入 <字符> 时按住 Super |
例:
C-f 的意思是按下 Control 再输入 "f" 字符 M-x 的意思是按下 Alt 再输入 "x" 字符 s-a 的意思是按下 Super 再输入 "a" 字符 (不常用)
有时候你会遇到多个快捷键的组合, 例如: C-x C-c
用于退出 Emacs.
如果你需要退出一些正在运行的指令, 使用 C-g
来退出它们.
你可以尝试按下 M-x
键, 它将会打开一个 “工具箱”, 你可以在里面找到所有的 Emacs 指令.
你可以使用 C-f
C-b
C-n
C-p
快捷键来缓慢地移动光标:
快捷键 | 作用 |
---|---|
C-f | 向后移一个字符 |
C-b | 向前移一个字符 |
C-n | 向下移一行 |
C-p | 向上移一行 |
然后你可以使用 M-f
M-b
以单词为单位移动光标:
快捷键 | 作用 |
---|---|
M-f | 向后移一个单词 |
M-b | 向前移一个单词 |
什么? 还不够快? 试试用 C-v
M-v
向上翻页或向下翻页:
快捷键 | 作用 |
---|---|
C-v | 向下翻译 |
M-v | 向上翻页 |
(或者你仍然可以使用 <PGUP>
和 <PGDN>
键进行翻页)
如果你想要使当前行在屏幕上的不同位置, 你可以使用 C-l
:
快捷键 | 作用 |
---|---|
C-l (第一次) | 将当前行放至屏幕正中间 |
C-l (第二次) | 将当前行放至屏幕最上方 |
C-l (第三次) | 将当前行放至屏幕最下方 |
C-a
C-e
M-a
M-e
能帮你快速将光标移至行首或行尾, 句子也行:
快捷键 | 作用 |
---|---|
C-a | 跳转至行首 |
C-e | 跳转至行尾 |
M-a | 跳转至句首 |
M-e | 跳转至句尾 |
然后 M-<
M->
是最快的移动光标的方式:
快捷键 | 作用 |
---|---|
M-< | 跳转至缓冲区开头 |
M-> | 跳转至缓冲区末尾 |
你可以为一些命令添加数字参数.
快捷键 | 作用 |
---|---|
C-u <次数> <命令> | 执行 <次数> 遍 <命令> |
这里是一个例子:
"C-u 8 C-n" 的意思是执行 8 次 "C-n", 也就是让光标向下移动 8 行. "C-u 8 *" 将会插入 "********"
Emacs 有一些被关闭的命令, 它们都较为危险, 所以 Emacs 关闭了它们.
如果你按下了 C-x C-n
, Emacs 将会创建一个名为 *Disabled Command*
的缓冲区, 然后你可以输入 y
来打开这个命令或输入 n
来保持关闭它.
快捷键 | 作用 |
---|---|
C-x C-s | 保存当前缓冲区至对应文件 |
C-x s | 保存所有缓冲区至对应文件 |
C-x C-f | 查找文件并打开它 |
你必须知道 删除
和 移除
的区别, 删除
会直接删除字符, 但 移除
会剪切字符至剪切板, 所以你可以找回它.
快捷键 | 作用 |
---|---|
C-x b | 跳转缓冲区 |
C-x k | 关闭缓冲区 |
<DEL>(DELETE 键) | 删除光标前的一个字符 |
C-d 或 <BACKSPACE> | 删除光标后的一个字符 |
M-<DEL> | 移除光标前的一个单词 |
M-d | 移除光标后的一个单词 |
C-k | 移除光标处至行尾的所有字符 |
M-k | 移除光标处至行首的所有字符 |
C-@ 或 C-<SPC> | 选择字符 |
M-w | 复制选择的字符 |
C-w | 剪切选择的字符 |
C-y | 粘贴剪切板中的字符 |
C-k (第一次) | 移除当前行 (不移除换行符) |
C-k (第二次) | 移除换行符 |
C-/ 或 C-_ | 撤回或重做 |
C-x u | 仅撤回 |
你可以使用一些快捷键来管理你在 Emacs 中的窗口.
快捷键 | 作用 |
---|---|
C-x 0 | 关闭当前窗口 (非缓冲区) |
C-x 1 | 只保留当前窗口 |
C-x 2 | 水平分裂出一个窗口 |
C-x 3 | 垂直分裂出一个窗口 |
C-x o | 跳转至下一个窗口 |
使用 C-s
向下搜索, C-r
为向上搜索.
通常, 我们需要配置出适合自己的配置文件以获得更好的编辑体验.
Emacs 的配置文件通常存放在家目录的 .emacs.d
文件夹下, 里面的文件结构通常如下:
- .emacs.d - init.el ; Emacs 默认会寻找此文件并加载 - elpa ; Emacs 将把下载的包裹放在此处 - etc ; 虽然不要求, 但推荐将个人配置放在此处
要配置出自己的配置文件, 你需要知道什么是 Emacs Lisp 以及如何使用它.
编程高手通常只需要阅读示例代码就能大概知道一个编程语言的基本语法.
(+ 1 1) ; 1 + 1
(+ 1 2 (* 2 3)) ; 1 + 2 + ( 2 * 3 )
(setq name "Emacs Lisp") ; 变量
(setq list '("1" "2" "3")) ; 列表
(car list) ; 提取列表的第一个值
(cdr list) ; 提取列表除第一个以外的值
(add-to-list 'list '("Things"))
(add-to-list 'load-path "path-to-path") ; 加载文件夹中的 Emacs Lisp 文件
(require 'name) ; 引用功能
(provide 'name) ; 提供功能
(push "thing" list) ; 推送到列表
(defun hello (myname) ; 定义函数
"函数文档"
(message "Hello, %s!" myname)) ; 将会在 mini-buffer 中显示 "Hello, Emacs Lisp!"
(hello name) ; 执行函数
顺便说一句: mini-buffer 是一块在状态栏之下的空白区域, 用于显示输出信息和基本文档.
;; UI 设置
(menu-bar-mode -1) ; 关闭菜单栏
(tool-bar-mode -1) ; 关闭工具栏
(setq tab-bar-show nil) ; 关闭顶栏
(scroll-bar-mode -1) ; 关闭滚动条
(tab-bar-mode -1) ; 关闭顶栏
(global-hl-line-mode t) ; 高亮当前行
(setq display-line-numbers-type 'relative) ; 为 display-line-numbers-mode 使用相对行号
(global-display-line-numbers-mode t) ; 打开行号
(toggle-frame-fullscreen) ; 全屏
(setq inhibit-splash-screen t) ; 关闭启动界面
;; 其它基本设置
(fset 'yes-or-no-p 'y-or-n-p) ; 切换回答是否的方式
(show-paren-mode t) ; 高亮 "()"
(electric-pair-mode t) ; 自动补全 "()"
(setq electric-pair-pairs
'((?\" . ?\")
(?\( . ?\))
(?\< . ?\>)
(?\{ . ?\}))) ; 设置括号补全的匹配规则
(setq make-backup-files nil ; 不生成备份文件
create-lockfiles nil ; 不生成锁文件
auto-save-default nil ; 关闭自动保存
)
(setq-default tab-width 2) ; 制表符长度
(setq-default indent-tabs-mode nil) ; 使用空格缩进
(setq user-emacs-directory "~/.emacs.d/var") ;;; 缓存文件夹
(setq user-init-file "~/.emacs.d/var/user-init.el")
(save-place-mode t) ; 在下一次打开文件时恢复上次的光标位置
(setq ring-bell-function 'ignore blink-cursor-mode nil) ; 关闭提示信息
(setq scroll-step 2
scroll-margin 2
hscroll-step 2
hscroll-margin 2
scroll-conservatively 101
scroll-up-aggressively 0.01
scroll-down-aggressively 0.01
scroll-preserve-screen-position 'always) ; 翻页设置
Emacs 教程: 在 Emacs 中按 C-h t
, Emacs 内置基础教程
Y 分钟速成 X, 其中 X = Elisp: https://learnxinyminutes.com/docs/zh-cn/elisp-cn
推荐设置: https://github.com/SpringHan/.emacs.d/blob/master/etc/settings/init-basic.el
GPL-3.0