Emacs 知识点速查

Emacs 是可扩展的、可定制的、自记录的实时显示文本编辑器。此参考适用于 Emacs 27+

入门

启动 Emacs

要进入 Emacs,只需输入其名称:

$ emacs

:-:-
C-z挂起 Emacs
C-x C-c永久退出 Emacs

全局描述

:-:-
C-<key>表示按住控件,然后按 <key>
M-<key>表示按 Esc 一次,然后按 <key>

注意:本备忘单遵循上述规则

移动

返回向前要移动的实体
C-bC-fHaracter
M-bM-f单词
C-pC-n线
C-aC-e行开头
(或结尾)
M-aM-e句子
M-{M-}段落
C-x [C-x ]
C-M-bC-M-fSexp
C-M-aC-M-e功能
M-<M->缓冲区开始
(或结束)

案例变更

:-:-
M-u大写单词
M-l小写单词
M-c大写单词
C-x C-u大写区域
C-x C-l小写区域

文件

:-:-
C-x C-f将文件读入 Emacs
C-x C-s将文件保存回磁盘
C-x s保存所有文件
C-x i将另一个文件的内容插入此缓冲区
C-x C-v将此文件替换为您的文件
C-x C-w将缓冲区写入指定文件
C-x C-q切换缓冲区的只读状态

错误恢复

:-:-
C-g中止部分键入或执行的命令
M-x 恢复会话恢复因系统崩溃而丢失的文件
C-x u C-_ C-/撤消不需要的更改
M-x 恢复缓冲器将缓冲区恢复到其原始内容
C-l重绘垃圾屏幕

Transposing

:-:-
C-t转置字符
M-t转置词
C-x C-t转置线
C-M-t转置性别

Scroll

:-:-
C-v滚动到下一个屏幕
M-v滚动到上一个屏幕
C-x <向左滚动
C-x >向右滚动
C-l将当前行滚动到
center, top, bottom

跳转

:-:-
M-g g转到行
M-g c转到字符
M-m返回缩进

标记

:-:-
C-@ C-SPC在标记在这里
C-x C-x交换点和标记
M-@设置标记 arg 单词
M-h标记段落
C-x C-p标记页面
C-M-@标记性
C-M-h标记功能
C-x h标记整个缓冲区

杀死和删除

向后向前要杀死的实体
DELC-d字符
(删除)
M-DELM-d单词
M-0 C-kC-k
(到结尾)
C-x DELM-k句子
M-- C-M-kC-M-k性爱

杀死

:-:-
C-W杀死区域 C-w
M-w复制区域杀死环
M-z char杀死下一次出现的字符
C-y拉回最后一个被杀的东西
M-y用之前的杀戮替换最后的猛拉

获得帮助

:-:-
C-x 1删除帮助窗口
C-M-v滚动帮助窗口
C-h aApropos:显示匹配字符串的命令
C-h k描述一个键运行的功能
C-h f描述一个函数
C-h m获取特定于模式的信息

帮助系统很简单。键入 C-h(或 F1)并按照说明进行操作。如果您是第一次使用,请键入 C-h t 以获得教程

多个窗口

当显示两个命令时,第二个命令是用于框架而不是窗口的类似命令

:-:-:-
C-x 5 1C-x 1删除所有其他窗口
C-x 5 2C-x 2拆分窗口,上方和下方
C-x 5 0C-x 0删除此窗口
:-:-:-
 C-x 3拆分窗口,并排
 C-M-v滚动其他窗口
:-:-:-
C-x 5 oC-x o将光标切换到另一个窗口
C-x 5 bC-x 4 b在其他窗口中选择缓冲区
C-x 5 C-oC-x 4 C-o在其他窗口中显示缓冲区
C-x 5 fC-x 4 f在其他窗口中查找文件
C-x 5 rC-x 4 r在其他窗口中以只读方式查找文件
C-x 5 dC-x 4 d在其他窗口中运行 Dired
C-x 5 .C-x 4 .在其他窗口中查找标签
:-:-:-
 C-x ^让窗户变高
 C-x {缩小窗口
 C-x }让窗口变宽

格式化

:-:-
TAB缩进当前行(取决于模式)
C-M-\缩进区域(取决于模式)
C-M-q缩进 sexp(取决于模式)
C-x TAB缩进区域刚性 arg 列
M-;缩进评论
C-o在点后插入换行符
C-M-o将其余行垂直向下移动
C-x C-o删除点周围的空行
M-^与上一个加入行(带 arg,下一个)
M-\删除点周围的所有空白
M-SPC在点上正好放一个空格
M-q填写段落
C-x f将填充列设置为 arg
C-x .设置每行开头的前缀
M-o设置面

信息

:-:-
C-h i输入信息文档阅读器
C-h S在 Info 中查找指定的函数或变量

在节点内移动

:-:-
SPC向前滚动
DEL反向滚动
b节点的开始

在节点之间移动

:-:-
n下一个节点
p上一个节点
u提升
m按名称选择菜单项
n按编号 (1–9) 选择第 n 个菜单项
f遵循交叉引用(用 l 返回)
l返回您看到的最后一个节点
d返回目录节点
t转到信息文件的顶部节点
g按名称转到任何节点

其他

:-:-
h运行信息教程
i在索引中查找主题
s搜索节点以查找正则表达式
q退出信息

小缓冲区

以下键在 minibuffer 中定义

:-:-
TAB尽可能完成
SPC最多完成一个单词
RET完成并执行
?显示可能的完成
M-p获取先前的 minibuffer 输入
M-n获取稍后的 minibuffer 输入或默认值
M-r正则表达式向后搜索历史
M-s正则表达式向前搜索历史
C-g中止命令

键入 C-x ESC ESC 以编辑并重复使用 minibuffer 的最后一个命令。键入 F10 以激活文本终端上的菜单栏项

标签

:-:-
M-.查找标签(定义)
C-u M-.查找标签的下一个出现
M-x 访问标签表指定一个新的标签文件
M-x 标签搜索正则表达式搜索标签表中的所有文件
M-x 标签查询替换对所有文件运行查询替换
M-,继续最后一个标签搜索或查询替换

缓冲器

:-:-
C-x b选择另一个缓冲区
C-x C-b列出所有缓冲区
C-x k杀死一个缓冲区

矩形

:-:-
C-x r r复制矩形进行注册
C-x r k杀死矩形
C-x r y拉长矩形
C-x r o打开矩形,向右移动文本
C-x r c空白矩形
C-x r t用字符串为每一行添加前缀

键盘宏

:-:-
C-x (开始定义键盘宏
C-x )结束键盘宏定义
C-x e执行最后定义的键盘宏
C-u C-x (附加到最后一个键盘宏
M-x name-last-kbd-macro命名最后一个键盘宏
M-x insert-kbd-macro在缓冲区中插入 Lisp 定义

Emacs 搜索

正则表达式(常用)

:-:-
. (dot)除换行符外的任何单个字符
*零次或多次重复
+一次或多次重复
?零次或一次重复
\引用特殊字符
\c引用正则表达式特殊字符 c
|替代(“或”)
\(...\)分组
\(:?...\)害羞的分组
\(:NUM...\)显式编号分组
\n与第 n 组相同的文本
\b在断字时
\B不在断字

正则表达式(条目)

开始结束实体
^$
\<\>单词
\_<\_>象征
\‘\’缓冲

正则表达式(冲突)

这些其他class
[...][^...]显式集
\w\W单词语法字符
\sc\Sc具有语法 c 的字符
\cc\Cc类别 c 的字符

增量搜索

:-:-
C-s向前搜索
C-r向后搜索
C-M-s正则表达式搜索
C-M-r反向正则表达式搜索
M-p选择上一个搜索字符串
M-n选择下一个稍后搜索字符串
RET退出增量搜索
DEL最后一个字符的撤消效果
C-g中止当前搜索

再次使用 C-sC-r 在任一方向重复搜索。 如果 Emacs 仍在搜索,C-g 只取消不匹配的部分

查询替换

:-:-
M-%以交互方式替换文本字符串
M-x regexp使用正则表达式
SPC / y替换这个,继续下一个
,换这个,别动
DEL / n不更换就跳到下一个
!替换所有剩余的匹配项
^回到上一场比赛
RET退出查询替换
C-r进入递归编辑(C-M-c 退出)

杂项

Shell

:-:-
M-!执行一个shell命令
M-&异步执行shell命令
M-在区域上运行 shell 命令
C-u M-通过 shell 命令过滤区域
M-x shell在window shell中启动一个shell

国际字符集

:-:-
C-x RET l指定主要语言
M-x list-input-methods显示所有输入法
C-\启用或禁用输入法
C-x RET c为下一个命令设置编码系统
M-x list-coding-systems显示所有编码系统
M-x prefer-coding-system选择首选的编码系统

寄存器

:-:-
C-x r s在寄存器中保存区域
C-x r i将寄存器内容插入缓冲区
C-x r SPC将点的值保存在寄存器中
C-x r j跳转到保存在寄存器中的点

各种各样的

:-:-
C-u num数值参数
M--否定论点
C-q char带引号的插页

处理 Emacs Lisp 的命令

:-:-
C-x C-e评估点前的性
C-M-x评估电流定义
M-x eval-region评估区
M-:读取和评估 minibuffer
M-x load-library从加载路径加载 Lisp 库

简单的定制

:-:-
M-x customize自定义变量和面

在 Emacs Lisp 中进行全局键绑定:

(global-set-key (kbd "C-c g") ’search-forward)
(global-set-key (kbd "M-#") ’query-replace-regexp)

缩写

:-:-
C-x a g添加全局缩写
C-x a l添加模式本地缩写
C-x a i g为这个缩写添加全局扩展
C-x a i l为这个缩写添加模式本地扩展
C-x a e显式扩展缩写
M-/动态扩展前一个单词

拼写检查

:-:-
M-$检查当前单词的拼写
M-x ispell 地区检查区域内所有单词的拼写
M-x ispell 缓冲区检查整个缓冲区的拼写
M-x flyspell 模式切换即时拼写检查

编写命令

语法

(defun command-name (args)
"documentation" (interactive "template")
body)

示例

(defun this-line-to-top-of-window (line)
    "Reposition current line to top of window.
With prefix argument LINE, put point on LINE."
    (interactive "P")
    (recenter (if (null line)
                  0
              (prefix-numeric-value line))))