Emacs
Emacs和Vim的主要不同在于, Vim是符合UNIX哲学的工具(只做一件事, 并把这件事做好),
Emacs是不符合UNIX哲学的工具(可以做任何事, 因为它本质上是一个Elisp的解释器).
Emacs是不符合UNIX哲学的工具(可以做任何事, 因为它本质上是一个Elisp的解释器).
- Vim的快捷键很多, 但Vim的模式和快捷键是固化的,
这使得这些按键在支持Vim键位的软件里通用, 而且Vim的快捷键确实很好用,
连Emacs用户也喜欢用evil-mode(用来在Emacs里使用Vim键位的插件). - Emacs的快捷键本质上是命令的绑定, Emacs的命令非常多, 这导致Emacs的快捷键比Vim还要多得多.
Emacs的键位因此变得非常难以记忆, 加上在不同的模式里快捷键可能会大变样,
导致掌握Emacs的快捷键极为困难, 很多时候还不如直接输入命令.
使用Vim能感受到显著地编辑效率提升, Emacs则不然, 但Emacs具有比Vim强得多的hack功能(elisp),
用户编写自己的功能比Vim要容易许多.
用户编写自己的功能比Vim要容易许多.
CONTROL
缩写为 C
, 在键盘上是Ctrl或Command键META
缩写为 M
, 在键盘上是Alt键SHIFT
缩写为 S
, 在键盘上是Shift键RET
或 RETURN
在键盘上是Enter键DEL
在键盘上是BackSpace键SPC
在键盘上是Space键ESC
在键盘上是Esc键q
关闭欢迎画面, 进入scratch(草稿, 一个空白缓冲区)C-x C-c
退出EmacsC-g
取消命令(用于取消当前已经输入的命令, 相当于Vim的 <Esc>
)C-u {number} {action}
次数重复命令, 可用于各种键. 若直接输入字符, 则输入该字符number次.C-z
暂离Emacs(回到终端, 用fg命令回来)ESC ESC ESC
离开命令(可以关闭缓冲, 窗格, 与 C-g
有一些区别)使用被禁用命令时(避免新手按错), 会弹出确认, 按n键拒绝执行命令.
C-v
向下翻屏 相当于 PageDownM-v
向上翻屏 相当于 PageUpC-l
将光标行置于屏幕中央C-l C-l
将光标行置于屏幕顶部C-l C-l C-l
将光标行置于屏幕底部CONTROL
组合键常用于语言无关单位(字符, 行)META
组合键常用于语言有关单位(单词, 句子, 段落)C-p
向上移动光标 previousC-n
向下移动光标 nextC-b
向左移动光标 backwardC-f
向右移动光标 forwardM-f
向后跳跃一个单词M-b
向前跳跃一个单词C-a
移动光标至行首 aheadC-e
移动光标至行尾 endM-a
移动光标至句首M-e
移动光标至句尾M-<
(<
左尖括号, 需要同时按住Shift) 移动光标至文件首M->
(>
右尖括号, 需要同时按住Shift) 移动光标至文件尾C-d
删除光标后的一个字符, 相当于Delete键C-h
删除光标前的一个字符, 相当于Backspace键M-<DEL>
删除光标前一个单词M-d
删除光标后一个单词C-k
杀死(剪切)至行尾 killM-k
杀死(剪切)至句尾 killC-<SPC> {移动光标选择文本} C-w
选择并杀死文本C-y
粘贴(先前杀死的)文本 yankingM-y
将刚刚用 C-y
粘贴的文本切换成更早的文本(重复按 M-y
可找回更早的文本) yankingC-/
或 C-_
或 C-x u
撤销C-x 1
关闭当前窗格以外的窗格, 也适用于各种命令打开的列表(它们就是以窗格形式显示的).C-x 2
将屏幕分为上下两个窗格C-x 3
将屏幕分为左右两个窗格C-x 4 C-f <输入文件名>
打开一个新窗格并打开新文件C-M-v
向下滚动另一个窗格C-M-S-v
向上滚动另一个窗格C-x o
将光标移动到其他的窗格(以遍历的形式) other多窗口主要用于图形界面, 文本终端只能显示一个窗口.
M-x make-frame <Return>
打开一个新的窗口M-x delete-frame <Return>
关闭当前窗口C-x C-f <输入文件名>
打开一个文件(和Vim一样, 以缓冲区形式打开, 所以也可以打开不存在的文件) find/fileC-x C-s
保存文件 saveM-x customize-variable <Return> make-backup-files <Return>
关闭文件备份特性(在保存时创建以~结尾的备份文件)C-x C-b
列出缓冲区(已打开文件列表)C-x b <缓冲区名称(大部分情况下与文件名相同)> <Return>
回到某个缓冲区C-x s
保存多个缓冲区(该命令会逐个询问已被修改但尚未保存的缓冲区是否要保存)缓冲区通常是文件, 但也存在Emacs内部定义的虚拟缓冲区(名称两侧有
可以用
*
符号),可以用
C-x b
打开, 以下是虚拟缓冲区:- Buffer List 缓冲区列表
- Messages Emacs底部出现的消息
间接缓冲区在分屏显示同一篇org-mode文档时很有用, 因为在间接缓冲区里, org-mode的折叠是独立的.
M-x clone-indirect-buffer
创建间接缓冲区由于Emacs命令数量太多, 键盘绑定不下, 所以很多命令需要靠扩展命令完成.
C-x
字符扩展命令(输入 C-x
后跟一个字符或组合键, 跟Vim的Leader键是一个作用, 只是Emacs的命令更多)M-x
运行命令(输入 M-x
之后输入一个命令名再按 <Return>
),以命令名形式扩展的命令都是不常用的命令(类似于Vim的ex命令),
本质上是函数(命令名就是函数名), 字符扩展命令不过是对函数名的键盘绑定.
M-x replace-string
字符串替换(不需要输入完整的命令名, 输入 repl s<TAB>
就可以完成命令补全),接下来Emacs会询问用户具体的参数(类似于Powershell).
M-x recover file
恢复自动保存文件(Emacs会创建自动保存文件, 类似于Vim的swp文件)主模式 major mode
辅模式 minor mode
辅模式 minor mode
不同辅模式下相同的命令会有一些细节变化, 辅模式可以同时开启多个.
启动模式的命令也可以用来关闭模式.
启动模式的命令也可以用来关闭模式.
M-x fundamental-mode
Fundamental模式(Emacs的主模式)M-x text-mode
自然文本辅模式(和主模式的区别在于M-f和M-b把单引号也视作单词的一部分)M-x auto-fill-mode
自动折行辅模式(超出边界的内容会被换行, 这个边界不是窗口的边界, 而是Emacs定义的每行最大字符数, 可以用
C-x f
设置)M-q
手动折行当前段落(参照 C-x f
设置的边界)C-s
向前搜索C-r
向后搜索C-h ?
查看所有帮助C-h v <变量名>
查看变量文档C-h f <函数名>
查看函数(命令)的文档C-h k <组合键>
查看快捷键的文档C-h c <组合键>
查看快捷键的简短说明C-h a <关键词>
相关命令搜索, 查找所有包含次关键词的命令SPC
先导键(和 Vim 的 <Leader>
等价), 默认为空格键按下
SPC
后, 会出现进一步按键的菜单, 每个按键后都跟随着说明文本, 用户不会一头雾水.Spacemacs 的按键基本上采用英语作为助记符.
虽然 Spacemacs 使用 Vim 的按键进行文本编辑,
但列表窗口仍然需要使用 Emacs 的按键进行上下移动(
因为列表窗口还可以输入字符进行模式匹配(搜索).
但列表窗口仍然需要使用 Emacs 的按键进行上下移动(
C-n
向下, C-p
向上),因为列表窗口还可以输入字符进行模式匹配(搜索).
遇到新的文件格式时, Spacemacs 会自动提示下载相关的 layer.
SPC ?
查看按键绑定https://github.com/syl20bnr/spacemacs/issues/4453
由于这个问题的存在, Spacemacs要么处于可以使用的状态, 要么是一坨纯粹的狗屎.
由于这个问题的存在, Spacemacs要么处于可以使用的状态, 要么是一坨纯粹的狗屎.
Spacemacs的稳定版本自2018年以来再也没有升级过主版本号, 一直停留在 200 版本.
官方仓库的主要分支现在已经切换到版本号升至300的develop分支, 似乎是想直接用开发版替代稳定版.
虽然 develop 在基本功能的使用上没有问题, 但有关新特性的文档处于语焉不详的状态.
官方仓库的主要分支现在已经切换到版本号升至300的develop分支, 似乎是想直接用开发版替代稳定版.
虽然 develop 在基本功能的使用上没有问题, 但有关新特性的文档处于语焉不详的状态.
SPC w
窗口菜单SPC w .
管理窗口状态(Window transient-state),处于该状态时, 可以使用单个按键调整窗口的大小, 位置等(下方会出现相关按键的提示信息).
实际上用鼠标就可以改变窗口大小.
SPC w /
左右分屏SPC w -
上下分屏也可以用 Vim 的
C-w v
和 C-w s
分屏C-w o
使当前窗口成为唯一窗口C-w c
关闭当前窗口SPC 1
切换光标到窗口 1(窗口的序号显示在窗口左下角)SPC 2
切换光标到窗口 2也可以用 Vim 的
C-w h/j/k/l
移动光标, 不需要在乎序号C-w H/J/K/L
移动窗口SPC w d
关闭当前窗口(关闭窗口并不会关闭缓冲区)SPC b
缓冲区菜单SPC b n
下一个缓冲区SPC b p
上一个缓冲区SPC b b
打开缓冲区列表SPC b d
关闭当前缓冲区SPC f f
通过交互式的资源管理器打开文件SPC f r
最近打开的文件列表SPC f s
保存文件(用 Vim 的 :w
替代就够了)SPC f t
开关 NeoTreeSpacemacs 使用 layer 作为配置单元, 多个 layer 可以堆叠在一起(即同时开启多个功能).
SPC f e d
打开 ~/.spacemacs
文件Doom Emacs相比Spacemacs更轻量, 也更接近原始Emacs.
- 官方引入了一些自以为是的怪癖, 例如将Evil的
s
键设置为其他功能, 并推荐用cl
替代原本的s
. - 社区小于Spacemacs, 因此虽然更轻量和更接近于原始Emacs, 但对于不熟悉Emacs的人来说也更难配置.
- Org Mode的行为与Spacemacs不符, 在中文文本的换行,
S-RET
键的绑定上都有奇怪的问题.