Emacs 入门
Emacs 是 Unix 世界最流行的编辑器之一,负有“神之编辑器”之盛名,学习它的理由毋须多言。但是对于新手来说,它的学习难度也是相当之大(说不难的都是忽悠,虽然可能是善意的谎言),但是掌握了它对于编程、编辑器甚至操作系统的理解都有帮助,因此我建议任何打算长期以编程为业的程序员都尝试一下。
Vim 还是 Emacs
这是一个长久的话题,也是程序员之间经久不衰的爆点之一(可能仅次于什么是最好的编程语言),对此我的建议是先学 Vim(因为 Vim 的入门相对简单一些,可以不必深入)再学 Emacs 然后再决定长期坚守在哪一阵营。
Vim 和 Emacs 孰优孰劣可能难争高下,但是 Emacs 的配置语言 Emacs Lisp 和 VimLang 之间则几乎没有可比性,Emacs Lisp(简称 Elisp)在完备和强大方面都要远胜后者。Elisp 强大的可编程性使得常常有人开发出强大的 Emacs 插件,也使得 Emacs 被它的拥趸们称为“Emacs OS”。当然 VimL 也可以开发出强大的功能,或者与 Python、Lua 之类的脚本交互,但这会带来一些额外的问题,这里不做多谈。
Emacs 作为操作系统来说启动速度还是相当快的!
Emacs 布道
这里主要是一些布道内容,用于展示 Emacs 的强大:
- 玩游戏
- 2048
- 贪吃蛇:
M-x snake
。(这是 Emacs 内置游戏,按键解释见后面) - 俄罗斯方块:
M-x snake
。(这是 Emacs 内置游戏,按键解释见后面)
- 任务管理 org-mode(建议上 YouTube 搜索大师的 org-mode 展示)
- 浏览网页
- 在线聊天(妈妈再也不用担心上班聊天被老板发现啦!)
- Slack:emacs-slack
- git 可视化
- Magit:GUI 的简单 + CLI 的强大!
- 内置 Terminal
(看完官网不理解这些插件的强大之处的话,建议上 YouTube 观看大师的使用方式。)
当然,对于作为最基本的编程工具来说,配置得当的 Emacs 也输 IDE 太多。
另外,如果你使用 MacOS 或者 Linux,在日常使用或者使用 Shell(bash/zsh)的过程中可能就已经在不知不觉的使用了 Emacs 的快捷键了,学习 Emacs 也能帮你提升日常工作的效率。
在 Emacs 世界中存活下来
Emacs 是一个强大的编辑器,并且自带了完善的自文档特性,但是作为新手在不熟悉 Emacs 基本概念的情况下依然容易迷茫在它的文字海洋中。
基本快捷键
Emacs 快捷键基本中的基本是这几个:
- C(Ctrl 或者 control 键)
- M(Meta,PC 中对应 Alt,Mac 上对应 option),Meta 键来自 Solaris,常见 PC 都不具备该键
- S(uper,PC 对应 Win 键,Mac 对应 command)
下面将介绍中将使用快捷键的国际通用简写,比如 C-x
指同时按下 Ctrl 键和 x 键,M-x
指同时按下 Meta 和 x,C-G
指同时按下 Ctrl Shift 和 g(没有开启 Caps Lock 的情况),M-x some-long-command
指在按下 M-x
后出现的输入栏中输入 some-long-command
并按下回车。这里的 some-long-command
通常是内置或者自定义的函数,可以在编辑器中直接调用。
在 Emacs 中,快捷键通常都是多个快捷键的组合,在前面的快捷(或组合)通常称为 prefix key,比如最常用的 C-x C-c
的 prefix key 就是 C-x
。相同 prefix key 的快捷键在功能上通常都有相似之处。
由于 Emacs 的快捷键通常都比较长,因此经常会出现前面按键按错了想取消的情况,这时候可以按下 C-g
,可以清空快捷键栈。C-g
快捷键的另一重要用处在于结束当前任务,比如某个后台解析任务。另外,如果你的 Emacs 安装了过多插件而硬件性能不够,或者某个后台任务进程不够 nice 导致 Emacs 假死的时候也可以尝试使用 C-g
。C-g
在 Emacs 快捷键中属于救星一般的存在。
相对于快捷键功能,Emacs 更多的功能并没有绑定快捷键,这些功能都对应了 Elisp 的函数,你可以按下 M-x
来运行这些函数。
另外,很多 Emacs 用户都建议在 Emacs 中完成所有任务,对于需要在 Shell 中完成的任务,你可以按下 M-!
通常也就是 Meta-Shift-1
,这样就能在 Emacs 中打开一个终端而不用单独开启 Shell 会话。
打开与退出
你可以直接输入 emcas somefile
直接打开文件,也可以启动 Emacs 后输入 C-x C-j
输入文件地址来打开指定文件。
保存文件命令通常是 S-s
,在 macOS 中就是 CMD-s
,和大多数 Mac 程序操作一致。
如果你想保存并退出 Emacs,可以输入 C-x C-c
,它会提示保存当前 buffer 并在那之后退出 Emacs。
学会使用文档
Emacs 强大的自文档也是其优势之一,任何时候你想要查找文档都无需离开 Emacs 自身。查看帮助文档相关命令的快捷键都是以 C-h
为 prefix 键:
C-h k
:查看某个快捷键(组合)的用处或者绑定的函数。C-h f
:查看某个函数的作用,以及它绑定的快捷键。C-h v
:查看某个 Emacs 变量的值。
Shell 相关命令
正如前面提到的,Emacs 的很多操作/控制命令都被 Shell(Bash/Zsh)所借鉴,并命名之“Emacs 模式”,可以看出 Emacs 究竟由多大的影响力!(很多 Shell 也支持 Vim 模式,不过通常默认都是 Emacs 模式。)
文本编辑命令
- Ctrl + a:移到命令行首
- Ctrl + e:移到命令行尾
- Ctrl + f:按字符前移(右向)
- Ctrl + b:按字符后移(左向)
- Meta + f:按单词前移(右向)
- Meta + b:按单词后移(左向)
- Ctrl + xx:在命令行首和光标之间移动
- Ctrl + u:从光标处删除至命令行首
- Ctrl + k:从光标处删除至命令行尾
- Ctrl + w:从光标处删除至字首
- Meta + d:从光标处删除至字尾
- Ctrl + d:删除光标处的字符
- Ctrl + h:删除光标前的字符
- Ctrl + y:粘贴至光标后
- Meta + c:从光标处更改为首字母大写的单词
- Meta + u:从光标处更改为全部大写的单词
- Meta + l:从光标处更改为全部小写的单词
- Ctrl + t:交换光标处和之前的字符
- Meta + t:交换光标处和之前的单词
控制命令
- Ctrl + r:向后搜索
- Ctrl + g:退出某个模式
- Ctrl + p/n:上下选择
配置脚本 Emacs Lisp
Elisp 作为 Lisp 最流行的方言之一,拥有强大的表现能力和灵活性。如果你不曾学习过类似的编程语言也不用担心 Elisp 是一门非常简单、学习曲线非常平坦的编程语言,只需几分钟到几小时(取决与你的编程经验)就可以入门,虽然还不足以读懂高手的配置,但已经足够编写和修改简单的配置脚本了。
另外,Elisp 作为最正统的函数式编程语言之一,对于真正热爱编程的人来说决定是非常值得学习的一门编程语言。
推荐教程:Learn X language in Y minute.。文档很短,找个在线 Elisp REPL 环境相信很快就能了解它的基本概念。
高手配置
和 Vim 一样,GitHub 上早有开源的高手们的配置了,并且支持灵活的扩展。比如:
- purcell/emacs.d 对流行编程语言都有基本的支持,更高级的功能需要自己扩展。Purcell 的配置的另一个问题是文档太多稀缺,作为新手实在是有点难以下手。
- redguardtoo/emacs.d 国人的 Emacs 配置,fork 自上面的库,内置了中文支持等众多自定义设置。
- bbatsov/prelude 相对全功能,但在试用了一段时间后发现自定义设置和我的个人习惯有较大冲突,遂弃。
- Spacemacs 结合了 Emacs 和 Vim 的优点,漂亮的 UI 即使不想要任何 Vim 特性也值得你一试。
结语
Emacs 强大的功能需要足够的时间去熟悉和掌握,初次学习花上一整天的时间并不奇怪,如果仍然感觉难以入门,那可能是你的背景知识仍不足够,不妨 2、3 年后再来重新学习,很多 Emacs 高手都经历过多次放弃和重新学习 Emacs 的经历。