种种原因从 Vim 转移到了 Emacs,把最近学习的经验给大家分享一下,希望对
同样想尝试 Eamcs 的同学有帮助。
在网络上对 Emacs 的教程多如牛毛为何还要在这里多此一举呢?Emacs被
「传说」成一种非常神奇复杂的软件。其实复杂到是不复杂,但是 Emacs确实是
非常的多变,不同 Emacs 用户手中的 Emacs 可能有完全不同的表现。同样的,
不同的 Emacs 教程也会体现出大家对 Emacs 完全不同的理解。多此一举也是希
望给大家一个参照,顺便给大家梳理一些资料。我的建议是多看一些入门的教程,
因为我发现很多入门的教程也非常的不同。各有不同的侧重。在这里我尽量写一
些我觉得其他的一些作者没有涉及到的内容。我自己也是新手,我希望我的经
验也可以更加贴近新手。
Emacs 是一个可定制的、可扩展的、自带文档的、高级的编辑器。可定制可扩展
就不多说了,这是一篇初级教程也不会设计太多这方面的内容。主要凸显在自带
文档和高级上面。
自带文档意味着你只要会查看文档你就可以自己摸索使用 Emacs,而高级则说明
Emacs 可以做的事情不止是添加删除编辑文件那么简单。他可以通过调用外部程
和插件完成复杂工作。
在这篇文章里我用 C-h 表示按下 Ctrl 同时按下 h 健。注意 C-h C-h 和 C-h h 的区
别,后者只有在按下第一个 h 时才按 Ctrl。我分五个部分来讲:
1.使用帮助。通过学习如何使用 Eamcs 中的帮助让你可以自己探索 Eamcs。
2.Emacs 的基本概念和逻辑。通过梳理一些概念和逻辑帮助理解记忆 Eamcs 的快捷键
3.讲如何提高编辑效率的一点想法,针对 Eamcs 但不止适用 Eamcs
4.通过介绍 org-mode 和 git-emacs 希望让新手可以尽快使用 Eamcs 工作,从做中学。
5.总结,补充,和一些资料。(Eamcs 要不要改键怎么该、和 KDE 快捷键冲突、进一步学习)
本文是入门初级。基本上不会太动 .emacs 文件,添加代码非常少而且你基本看字面就能懂。
好了话不多讲让我们开始。
1.使用帮助
之前说过 Emacs 是自带文档的, Emacs 的文档非常丰富(涉及各种模式、各种
命令甚至是 elisp 的参数)而且非常方便查询。我们要学的第一件事情就是学
者使用帮助。
除去学会 C-x C-c 来关闭 Emacs 和用 C-x C-s 来保存文件,用 C-x C-f 来打
开文件外,理论上你只要再学会这一个命令就可以自己探索 Emacs 了。那就是
C-h C-h,他是关于 Emacs 帮助的帮助。他会告诉你在按下 C-h t 以后你可以开
始一个入门的教程(有中文版,大家尽量多做几次这个联系)。按下 C-h f 后可
以输入你需要查询的函数来查询功能,而按下 C-h k 后你可以输入组合键来查询
组合键的功能。
其他的大家可以自己探索。比如 C-h b 可以列出所有定义好的快捷键,包括你
自己后来定义的。给你自己定义的快捷键加上适当的注释这些注释就会出现在帮
助说明里。
特殊的提一下 C-h 还可以添加在命令的后面。比如你按下 C-x C-h 就会出现所
有以 C-x 开头的命令的简短说明。
有人会说 Emacs 的快捷键实在太多了无法记忆,其实不用记,忘记了可以查看文
档,在使用中记忆。 而且 Emacs 的快捷键是有一定逻辑的。以 C-h 为例,不是
说 C-h 可以添加命令后面么?而 C-h C-h 不就是 C-h 添加在一个命令(C-h)
的后面从而获得一个以 C-h 开头的命令的帮助么?更多的逻辑可以在使用中慢
慢总结,我也会在下面总结一些。
除了 C-h 还有一个快捷键需要掌握那就是 C-g。这是一个刹车,当你不小心输
入错误的时候可以通过它来中止命令。
2.理解 Emacs 的基本概念和内在逻辑
Emacs 一个重要的概念是缓冲区,缓冲区就是你编辑文件的区域。Emacs 会把文
件的内容拷贝到缓冲区进行编辑,保存则是把缓冲区的内容保存到文件。Emacs
可以编辑多个缓冲区。那么如何在多个缓冲区中切换呢?可以用 C-x b,然后输
入缓冲区的名字。
注意,在这里你不用完整的输入名字可以通过 Tab 键补全。这是 Emacs 的一个
大杀器,也被移植到了很多其他软件上比如各种 sh。Emacs 还有一点非常不错
的就是你在「命令的输入区域」(其实也是一个缓冲区)同样可以使用 Emacs
的快捷键,这和 Vim 不同。在 Vim 中你如果输入命令就不能在通过 hjkl 导航,
但是在 Emacs 中你依然可以使用比如 C-t(交换两个字母)来纠正输入错误。
关于缓冲区还有一个命令就是 C-x C-b,他会给出一个缓冲区的列表。从而让你
在这个列表中批量的处理缓冲区。这个列表位于一个缓冲区内,而这时屏幕会被
分成两个「窗格」来显示这个缓冲区。这时你可以通过 C-x o 来移动到另一个
窗格。或者 C-1 来关闭另一个窗格或 C-0 来关闭当前窗格。窗格被关闭但是缓
冲区还是在的,你可以通过 C-x b 重新打开他。
这里又带出 Emacs 的另两个重要概念,一个就是「窗格」,有的地方翻译成「窗
口」,为了和习惯统一我们还是叫窗格好了,就是一个窗口内分成好几个区域显
示文件。
另一个就是「模式」。「模式」以为着 Emacs 会在不同的模式下有不同的行为。而
Emacs 会根据不同的文件类型自动载入一种模式,比如你编辑一个 C 文件
Emacs 就会进入c-mode。模式是对缓冲区而言的,不同的缓冲区会有不同的模式。
而显示缓冲区列表的缓冲区也会处于一种特殊的模式之下。他提供一些特殊的行
为。比如你不能再进行编辑了(当然,这是多余的)。这时 Emacs 变得有点像
Vim,按键变成了命令。按 d 或者 k 会标记一个缓冲区删除,按 s 会标记一个
缓冲区储存。按 x 会执行你标记的命令。而 v 则会打开一个缓冲区。
通过熟悉一些基本操作大家也对 Emacs 的命令有了初步的了解了。 Emacs 命令
是非常有规律的。
最常见的就是 C-n(这里的 n 代表各种不同的键),重点掌
握,比如 C-p C-f C-b 移动,C-s 搜索等等。另外注意,Emacs 把 C-1 绑定为
关闭其他窗格可以看出 Emacs 对窗格控制的重视。
第二类就是 Alt-x,一些没有绑定快捷键的函数就要靠他执行。
第三类是 C-x,这是一个前缀,以 C-x 开头的命令多余文本编辑有关。比如你
直接 C-q 是引用,而在 C-q 前加一个 C-x 变成 C-x C-q 则是把文本变成只读
模式。多举一个例子吧,不多见的,比如 C-x + 回车 + f 可以改变文件编码。
C-x + 回车 + r 则改变显示文件所用的编码。这个编码的提示就是在那个状态
行的最左边。一般显示是 U ,就是指 UTF-8。
第四类是 C-c,这多于一些特殊模式有关,大多不是全局快捷键,只有在一定模
式下才可以用,比如 org-mode 中用 C-c C-l 插入链接。
主要就是这四类。在这里加一类 Alt-n。Alt 命令多与文本结构有关,比如
Alt-f 前移一个词。Alt-q 文本模式下重排段落。
主要说一个很多教程里没有提到了 Alt-g,在使用 Vim 中
最爽的莫过于用 gg 直接跳到某一行了。比如看到文件提示说哪行出错可以快速
到达。很多 Emacs 的参考书都是用 Alt-x 加命令 goto-line 来跳行的。这太
慢了,有了自动补全也慢。其实现在的 Emacs 中已经有了这个快捷键(貌似新
加入的),可以用 Alt-g g 后者 Alt-g Alt-g 完了输入行号还快速到达某一
行,随不比 Vim 但也还可以。
3.如何提高工作效率?
在开始使用 Emacs 的时候我们会想:Emacs 在移动方面不如 Vim 那么如何在
Emacs 中提高效率呢?
当然 Vim 用户的目标比较明确,更多的是苦练肌肉。而 Emacs 用户则更多靠思考。
这里就是我总结的如何思考。当然,这一节并不止是针对 Emacs 来说的。
a 从弱处着手
移动、快速定位。Emacs 要比 Vim 更多需要技巧。因为这点 Emacs 不如 Vim。
用 Ctrl-v 来翻页而不要用 Ctrl-p,混合使用各种移动方式,多使用 Alt-f 而
不是 Ctrl-f。按照词为单位前移不但速度快更有逻辑。先定位页再定位段落再
定位句子、行最后是词语单词。交叉使用还能很好的缓解小拇指压力。Vim 用户
也是,好要更好,通过交叉使用定位更加高效。
b 从强处着手
Emacs 强在工具的整合,在组织多个文件(其实这点并不比 Vim 强只是 Eamcs
比较强调)。编辑总的来说是思考的活,不是编辑速度有多快,而是要帮你更加
舒服愉快的编辑,让你思绪更加流畅。通过合理的组织文件,利用工具来处理掉
一些重复劳动来使使编辑变得愉快。
比如在使用 org-mode 写文章的时候,你要插入一个链接,如果你老是输入
[www.google.com]谷歌]]那就繁琐死了。特别中文标点打不出 「 ]」 来,你要
用中文描述链接还要来回切换输入法。这时 Emacs 就发挥出优势了。你可以通
过 C-c C-l 自动插入一个链接,他会提示你写入链接的地址和描述。
Emacs 的各种模式下有很多这样快捷键。你也可以自己定制。挖掘出一些编辑时
经常要用到的重复的动作来通过一些快捷键自动化处理掉他们。
当然 Vim 用户也可以通过 vimscript 来做到这点。但是 Emacs 还有一个大杀器
就是「宏」。Emacs 翻译过来就是「宏编辑器」。宏有两个含义,一个是elisp
中的宏,一个是编辑器中的「宏」录制。你可以通过 C-x ( 开始一个宏录制
C-x ) 结束一个宏录制。把需要反复执行的操作录制成一个临时的宏,用C-x e
反复调用执行。这不需要你掌握 elisp,宏还可以保存,命名。相当于自己写了
一个 elisp 函数。你可能会觉得用不上宏,但是相信我。你会在很多地方用上宏,
当然这需要你自己挖掘编辑中的重复功能,这是非常有趣的过程。比如我要给每
一段话前边加空格,就可以通过录制宏来完成。
4.使用 Emacs 开始工作(org-mode 和 git-emacs)
Emacs 功能众多,拿 Emacs 干什么可以快速入手呢?推荐两个东东,以哦
org-mode 一个 git-emacs。一个自带一个需要安装。
org-mode 声名远扬就不多说了。连 Vim 都有一个很简单的 org-mode 移植。
org-mode 比起其他标记语言比如 markdown 来说一是功能更强大(也更复杂),
二是和 Emacs 绑定,更便捷。再也不用记忆是 ]() 插入链接还是 ]]] 插
入链接了。一些特定功能都可以用快捷键来搞定。
语法就不多说了。我用 org-mode 有两个主要功能,一是时间管理。二是管理个
人知识,用来取代 vimwiki 的。前者说的很多。简单提一下,时间管理主要就
是要有全局快捷键。可以随时查看修改 TODO list,只要在 .emacs 中添加如下
代码即可。
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cb" 'org-iswitchb)
当然你还需要有一些文件来写 TODO list 啦,然后让 org-mode 可以通过快捷
键跨俗查找。添加如下代码。
(setq org-agenda-files (list "文件位置1"
"文件位置2"
"文件位置3"
"..."))
C-c a a 可以查看日程,C-c a t 查看所有 TODO,在全局文件里的。 你输入完
C-c a 会看到一个提示的。
下面讲怎么建立一个个人 wiki 系统。在 .emacs 中添加如下代码。
(setq org-publish-project-alist
'(("你的wiki的名字"
:base-directory "wiki 文件存放的位置"
:publishing-directory "导出 HTML 文件储存的位置")))
然后你在 base-directory 下建立 org 文件编辑就可以了。你可以用快捷键导
出所有在一个项目里的 org 文件。
这里有一个问题。wiki 都有主页。那么 org-mode 如何打开主页呢?每次输入
文件路径多繁琐。这点确实没有 vimwiki 来的便捷。org-mode 没有快捷键打开
某个特定文件。也许因为 vimwiki 本来就是用来做个人 wiki 更加有针对性。
但是我们可以通过 Emacs 的书签功能来弥补。书签也是提高编辑效率的一大武
器。编辑一个文件时通过 C-x r m 就可以把当前文件加入书签。他会提示给书
签命名。然后 C-x r b 输入一个书签名就可以快速打开那个文件。有了书签甚
至你很少会用 C-x C-f 了。
下面将 git-eamcs,虽然 Eamcs 本身就有 VC 模式也支持 git,但是一直无法
用他来建立分支。功能也比较简单。有了 git-emacs 就可以通过 Alt-x 输入几
乎所有 git 命令了。更重要的是,你不用记 git 命令而直接用快捷键!更有,
Emacs 会在状态栏显示文件状态。最左边有红点说明文件修改没有提交,绿点则
说明已经提交。Emacs 同样也已操作一个目录来管理里面的 git 仓库。用法大
家可以用 C-h 来查看(当然是在安装好以后了),这里只是简单的讲安装。
把 git-emacs 下载后移动到 .emacs.d 文件中然后添加如下代码即可。
(add-to-list 'load-path "~/.emacs.d/git-emacs/")
(require 'git-emacs)
下载可以通过
git clone https://github.com/tsgates/git-emacs.git
,当然你要有 git。
其实 Emacs 还有一个管理插件的插件,可以让你定制你的 Emacs 更加有序。
有了 org-mode 和 git-emacs 你基本可以用 Emacs 干一些小事情了。比如写
日记、做笔记。这基本上也是很多人日常要干的事情。在使用中继续学习。
5.总结、补充和更多的资料
写的有点乱我总结一下。学习 Eamcs 你要掌握的就是
a 会用帮助
b 理解「窗口」「窗格」「缓冲区」「模式」并熟悉常见命令(缓冲区各种切换、
使用书签)
c 会用宏
d 了解如何才能高效编辑,自己探索挖掘。
在这个补充几个内容
Emacs 该不该改键?
这纯粹是我个人的思考。由于我是用 Emacs 写文章而不是写代码并不太注重移动,
在我的本本上 Ctrl 键也可以按到,按照我在第 4 点里说的也不是很费小拇指。
改了反而让你不习惯使用别人的电脑。故不支持。支持改键的观点也有。因为 Eamcs 和
Vim 的历史很早,当时的键盘可不是这样的!那时候 Ctrl 键在 A 的左边。Esc
键在 Q 的左边。可以说改了才是正宗的。如果你确定要改有,推荐两种
- 交换 Ctrl 和 CapsLock。Vim 用户可以交换 Esc 和 CapsLock。KDE 可以直
接在系统设置里改(Gnome 应该也可以,连 Mac 都可以)。这就是早期键盘的布局。 - 交换 Ctrl 和 Alt,依据是 Crtl 比 Alt 多用。改 CapsLock 键还是费小拇
指。
其他方案你不是 Emacs 死忠、骨灰级用户不用考虑了。。。太凶残了,有把 「’」
(Enter 键左边那个键)改成 Ctrl 的,有个干脆放弃了现有的键盘布局,把 E
的位置改成 P 的等等。。。。最后一种据说才是最有效的。还有比如放弃 Alt 键也不太推荐。
Emacs 和 KDE 全局快捷键冲突的问题
比较烦的是 Ctrl+Alt+v,这和剪切板的一个快捷键冲突了。你可以把剪切板的
快捷键改掉。我的方法是设置 Emacs 窗口强制忽视 KDE 全局快捷键。
在 Emacs 窗口顶部右击,更多动作-> 特殊应用程序设置
「在外观和修正」中修改忽略全局快捷键选项。在「布局和访问」中设置一个快
捷键。我是 Win+E。这样当 Emacs 的窗口在前的时候全局快捷键都失效(除了
非 KDE 程序比如输入法)。当你想要使用全局快捷键的时候,可以用 C-z 把
Emacs 最小化,这是一个 Emacs 自身的命令(在终端下是暂时挂起,在 X 下是
最小化)。用 Win+E来找回,这是通过 KDE来设置的。
Eamcs 基本上每个人都会喜欢的简单修改
开启自动换行(写文章不用敲回车了)
去掉无用的滚动条、工具栏、还有讨厌的「比比」的声音。
;; 自动启动自动换行模式(在 text 和 org 模式中)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
(add-hook 'org-mode-hook 'turn-on-auto-fill)
;; 关掉噼里啪啦的声音
(setq visible-bell t)
;; 关闭滚动条菜单栏
(tool-bar-mode 0)
(scroll-bar-mode 0)
最后推荐阅读《学习 Gnu Emacs》 和 《Gnu Eamcs lisp 编程入门》。都有中文
版。
很多发行版 wiki,一些博客都有关于 Emacs 的教程,建议多多涉猎。
如果你真的想要学习一下编程的话(不是做程序员,而是把其当成一种基本
技能,学习一些编程的基本方法),想进一步定制 Emacs 的话我推荐先学《程序
设计方法》(How to Design Programs, HtDP),比著名的 SICP 简单,不是让你
掌握语言而是真的学怎么写程序,函数式可能对学过一些数学的人来说更容易理
解。用的语言是 scheme。也是一种 lisp方言。和 elisp 很像。我推荐人初学语
言学 scheme 原因就在这两本书《HtDP》和《SICP》还有 Eamcs。两本书用的都是 scheme。
少有的专注将方法而不是纠结在语法。scheme 的语法也很简单。学会了 scheme 还可以很
快入手 elisp。而 Emacs 是个大玩具,写 Eamcs 函数和 mode 相对要比写程序简单。
你也可以写个游戏在 Eamcs 里运行。自己定制也很实用。Eamcs 不是码农专用。最普遍的
完全可以定制成一个高效的写作环境。
写的匆忙有什么问题和错误欢迎指出。