Emacs 是一个历史悠久的文本编辑器(最初版本发布于 1976 年)。它的核心是一个 Emacs Lisp(Lisp 编程语言的一种方言)的解释器,这给予了它近乎变态的扩展性和定制性。
Emacs 有着“神之编辑器”和“伪装成操作系统的编辑器”的称号,功能的强大与灵活可想而知。
一、进入 emacs
直接在终端输入 emacs
命令即可进入 emacs 编辑器,该命令后面可跟一个或多个需要编辑的文件。
使用 --no--init-file
或 -q
选项可以在启动时不使用任何初始配置文件( ~/.emacs 或 default.el )
GNU Emacs 默认界面
当然这个界面,看上去稍微有些年代感……
稍微修改一下启动配置文件(
~/.emacs),内容如下:
; .emacs 界面配置
(setq default-frame-alist
'((vertical-scroll-bars)
(top . 25)
(left . 45)
(background-color . "black")
(foreground-color . "grey")
(cursor-color . "gold1")
(tool-bar-lines . 0)
(menu-bar-lines . 1)))
(set-default-font "Source Code Pro 16")
(setq inhibit-startup-message t)
修改后的效果:
自定义界面
二、退出 emacs
组合键定义:
C 表示 Ctrl
键,M 表示 Windows系统里的 alt
键和 MacOS 系统里的 option
键。
功能 |
快捷键 |
命令(按下 M-x 后输入) |
挂起 emacs(在图形模式下:最小化/还原) |
C-z |
suspend-emacs(suspend-frame) |
退出 emacs |
C-x C-c |
save-buffers-kill-terminal |
三、文件操作
功能 |
快捷键 |
命令(按下 M-x 后输入) |
读取文件内容到 emacs 中(打开文件) |
C-x C-f |
find-file |
保存文件 |
C-x C-s |
save-buffer |
保存所有文件 |
C-x s |
save-some-buffers |
将另一个文件的内容插入到当前正在编辑的文件中 |
C-x i |
insert-file |
关闭当前文件并打开另一个文件 |
C-x C-v |
find-alternate-file |
将当前 buffer 中的内容写入到指定的文件(另存为) |
C-x C-w |
write-file |
启用/关闭当前 buffer 的只读模式 |
C-x C-q |
read-only-mode |
四、获取帮助
功能 |
快捷键 |
命令 |
新手指引 |
C-h t |
help-with-tutorial |
显示匹配指定正则表达式的命令 |
C-h a |
apropos-command |
显示绑定指定快捷键的函数的帮助信息 |
C-h k |
describe-key |
显示指定函数(命令)的帮助信息 |
C-h f |
describe-function |
显示 Mode 相关的信息 |
C-h m |
describe-mode |
五、错误恢复
功能 |
快捷键 |
命令 |
中断正在输入或执行中的命令 |
C-g |
keyboard-quit |
恢复由于系统崩溃未保存的文件 |
M-x recover-session |
recover-session |
撤销不想要的操作 |
C-x u 或 C-_ 或 C-/ |
undo |
将 buffer 恢复到初始状态
|
M-x revert-buffer |
revert-buffer |
六、增量搜索
功能 |
快捷键 |
命令 |
向前搜索(向文档底部搜索) |
C-s |
isearch-repeat-forward |
向后搜索(向文档顶部搜索) |
C-r |
isearch-repeat-backward |
正则表达式搜索(向文档底部) |
C-M-s |
isearch-forward-regexp |
正则表达式搜索(想文档顶部) |
C-M-r |
isearch-backward-regexp |
中断当前搜索 |
C-g |
keyboard-quit |
重复使用 C-s
或 C-r
可以继续当前方向对同一关键字的搜索(即跳转到下一个匹配项)
七、Buffers
功能 |
快捷键 |
命令 |
列出所有的 Buffer 信息 |
C-x C-b |
list-buffers |
切换到另一个 Buffer |
C-x b |
switch-to-buffer |
关闭 Buffer |
C-x k |
kill-buffer |
八、Shell 命令
功能 |
快捷键 |
命令 |
执行 Shell 命令 |
M-! |
shell-command |
异步执行 Shell 命令 |
M-& |
async-shell-command |
开启一个 *Shell* 窗口用于执行命令 |
M-x shell |
shell |
九、移动
对象 |
方向向后(文档顶部) |
方向向前(文档底部) |
字符 |
C-b |
C-f |
单词 |
M-b |
M-f |
行 |
C-p |
C-n |
跳转到行首(行尾) |
C-a |
C-e |
句子 |
M-a |
M-e |
段落 |
M-{ |
M-} |
页面 |
C-x [ |
C-x ] |
函数 |
C-M-a |
C-M-e |
跳转到文档开头(结尾) |
M-< |
M-> |
十、跳转
功能 |
快捷键 |
命令 |
滚动到下(后)一屏 |
C-v |
scroll-up-command |
滚动到上(前)一屏 |
M-v |
scroll-down-command |
向左滚动屏幕 |
C-x < |
scroll-left |
向右滚动屏幕 |
C-x > |
scroll-right |
将当前行置于屏幕中央/顶部/底部 |
C-l |
recenter-top-bottom |
跳转到指定行 |
M-g g |
goto-line |
跳转到指定字符 |
M-g c |
goto-char |
十一、选择
功能 |
快捷键 |
命令 |
在当前位置设置标记 |
C-@ |
set-mark-command |
选中整个段落 |
M-h |
mark-paragrath |
选中整个页面 |
C-x C-p |
mark-page |
选中整个函数 |
C-M-h |
mark-defun |
选中整个 Buffer |
C-x h |
mark-whole-buffer |
十二、搜索替换
功能 |
快捷键 |
命令 |
以交互的方式检索并替换字符串 |
M-% |
query-replace |
使用正则表达式检索替换 |
M-x query-replace-regexp |
query-replace-regexp |
交换模式中的合法输入 |
|
|
替换当前匹配并跳转到下一个 |
SPACE 或 y |
|
替换当前匹配后不做移动 |
, |
|
跳过当前匹配直接到下一个 |
DELETE 或 n |
|
替换剩余的所有匹配项 |
! |
|
跳转到上一个匹配项 |
^ |
|
退出搜索替换模式 |
ENTER |
|
十三、多窗口
功能 |
快捷键 |
命令 |
关闭其他所有窗口(只显示当前窗口) |
C-x 1 |
delete-other-windows |
分割当前窗口(上下) |
C-x 2 |
split-window-below |
关闭当前窗口 |
C-x 0 |
delete-window |
分割当前窗口(左右) |
C-x 3 |
split-window-right |
滚动另一个窗口的内容 |
C-M-v |
scroll-other-window |
移动光标到另一个窗口 |
C-x o |
other-window |
在另一个窗口打开文件 |
C-x 4 f |
find-file-other-window |
在另一个窗口运行 Dired |
C-x 4 d |
dired-other-window |
增大当前窗口高度 |
C-x ^ |
enlarge-window |
缩减当前窗口宽度 |
C-x { |
shrink-window-horizontally |
增大当前窗口宽度 |
C-x } |
enlarge-window-horizontally |
十四、Minibuffer
功能 |
快捷键 |
尽可能补全 |
TAB |
补全至一个完整单词 |
SPACE |
补全并执行 |
ENTER |
显示所有可能的补全结果 |
? |
获取上一个输入 |
M-p |
获取下一个或默认输入 |
M-n |
向后搜索输入历史(正则表达式) |
M-r |
向前搜索输入历史(正则表达式) |
M-s |
中断命令或输入 |
C-g |
十五、简单定制
功能 |
按键 |
定义变量或外观 |
M-x customize |
自定义全局按键映射(例子) |
(global-set-key (kbd "C-c g") 'search-forward) |
参考资料 & 拓展阅读
Emacs Reference Cards
GNU Emacs manual
An Introduction to Programming in Emacs Lisp
Emacs Lisp Reference Manual
网友评论