不要从零开始

现在,功能强大的编辑器层出不穷,比如notepad++,sublime text等,然而,面临这众多的新生代产物,Emacs仍然占有一席地位,因为他是已经超越了编辑器范畴的存在。 其高度可定制化带来的复杂性和为了便捷操作设定的茫茫多的快捷键,入门难度令人发指。而Emacs又是以拓展能力闻名天下的,很多人在通读help-with-tutorial之后感觉不过尔尔便放弃了。 陈斌的一篇文章《一年成为Emacs高手》带领很多人走进了Emacs的大门。作为高手,他提供了一个科学的方法论,对于具体的步骤,则需要我们自己步步摸索。本文作为我个人使用emacs过程中的心得总结,希望能帮助到更多的人。 这里便提出第一个建议,请不要从零开始对emacs进行配置,繁琐的配置可能打消你使用他的积极性。所以采用大神的配置,直接知其然,再试图知其所以然。甚至你不必探寻配置细节,直接感受其魅力所在。

安装、配置

  • 平台选择

    优先级如下:Mac > 你熟悉的linux发行版 > windows中cygwin > windows直接使用 > 你不熟悉的Linux

    1. Mac作为Unix的分支和Linux相似度很高,保持了类似的目录结构和好用的Terminal的同时有丰富的软件资源,并且在很多地方沿用了Emacs的快捷键。
    2. 没有Mac的环境下选择一款合适的发行版也是不错的,前提是你熟悉Linux,不然还是有点头大的。
    3. Cygwin作为windows下模拟Linux环境Terminal的老牌软件,在他的支持下在windows上使用Emacs也还可以接受。
    4. windows的目录与Linux严重不同,安装好的Emacs可能在环境变量等问题上遇到些麻烦,所以…
    5. Linux环境还是应该熟悉一下,微软大法好,可是作为一个程序员完全不会Linux感觉不太合适。
  • 安装
    1. Mac用户请到http://emacsformacosx.com 下载安装即可。还有其他版本,我没有用过
    2. Linux会自带一个Emacs,可能是Emacs23,有些插件也许与24不同。 为避免掉坑,还是建议删除之,根据不同发行版的源选择安装。
    3. cygwin的话在安装的时候可以选择欲安装的包,可以连同git等常用命令行工具一起下载
  • 配置

    我这里所指的配置并不只是配置文件,而是包括很多插件在内的环境搭建。作为入门者,我听从陈斌大神的建议选择了他的配置文件,他的文章中有链接,是github上的一个文件夹。

    1. 要是之前没用过emacs可跳过这一步, 删除原有的配置文件,一般来讲在 ~/.emacs.d/,没有的话搜索一下。 直接 rm -r 即可。
    2. 下载到的emacs.d解压到 ~ 下, 改名前面加 . 隐藏该目录。
    3. 启动Emacs,不出现意外的话将自动下载文件,然后就可以使用了
    4. 部分网络可能会出现插件网站被墙的情况,这时候需要安装goagent,代理下载文件。 若使用goagent请在配置好相关内容后,从terminal中输入 httpproxy=http://127.0.0.1:8087 emacs 进行插件的下载。

基本知识

  • 快捷键:
    1. C键: control,可以理解为和语义无关的控制,比如移动一个字符,移动到行尾等。
    2. M键: meta,可以理解为语义相关控制,比如移动到句首,段尾等。
    3. S键: shift,和其他的组合使用。
    4. RET: return,回车。
    5. ESC: escape。
  • 帮助文档: 官方文档,并不长,介绍了一些基本用法。 M-x help-with-tutorial(在Emacs中按住Alt 按x 然后输入help-with-tutorial 回车) 花时间阅读一下,记住基本的十几个快捷键后开始使用Emacs吧
  • buffer: Emacs中基本的单位,每打开一个文件或者窗体都将打开一个buffer,通过光标控制可以进入指定buffer进行操作,启动Emacs后会自动运行两个buffer(scratch,Messages)
  • window: Emacs中一个的界面可以被任意切分,横向、纵向任意数量,使得不同的buffer同时出现在屏幕上
  • frame: Emacs的GUI称为frame,可以在基本frame上新建一个窗体,但不太常用
  • M-x 执行一个程序,配置插件后会根据你输入的内容自动补全

Emacs功能与Vim有重叠部分,如果激活了Evil的话,可以用Vim的方式进行很多操作,而不必再次记忆Emacs快捷键

文件、buffer、window操作

以下快捷键均以 C-x 开始

key funciton
C-f 打开一个文件
C-s 保存
C-w 另存为
C-v 关闭当前buffer并打开新文件
i 在当前光标处插入内容
b 切换、新建buffer
C-b 显示当前所有buffer列表
k 关闭当前buffer
C-c 退出emacs
C-q 只读、读写模式的切换
0 关闭当前window
1 只保留当前window
2 上下分割当前window
3 左右分割当前window
o 切换到下一个窗口

光标的移动

Evil很强大,会覆盖掉部分默认的移动方式,若开启Evil请熟悉Vim

C-f 后一个字符
C-b 前一个字符
C-p 上一行
C-n 下一行
C-a 行首
C-e 行尾
M-b 上一个单词
M-f 下一个单词
M-a 句首
C-e 句尾
M-< 文件开头
M-> 文件末尾
M-g g 跳到指定行
C-v 向下翻页
M-v 向上翻页
C-M-f 向前匹配括号
C-M-b 向后匹配括号

文本编辑

C-@ 设置标记位
C-d 删除后一个字符
M-d 删除后一个单词
C-Del 删除前一个字符
M-Del 删除前一个单词
C-k 删除一行
C-w 删除标记区域内容
M-w 复制标记区域内容
C-y 粘贴
M-y 粘贴其他(循环缓冲区)
C-t 交换两个字符位置
C-t 交换两个单词位置
M-u n 重复上个命令n次
C-s 向后搜索
C-r 向前搜索

帮助

以下命令均以C-h开始

m 查看当前模式
c 查看快捷键绑定的命令
k 显示快捷键绑定的命令的作用
f 显示函数功能
b 查看当前缓冲区的可用快捷键
t Emacs教程

org-mode

org-mode功能很强大,这里仅介绍快捷键以备查看

大纲

  • 折叠:

    S-TAB 循环整个文档的折叠方式
    TAB 循环光标所在处折叠方式
  • 移动:

    C-c C-n/p 上、下一个标题
    C-c C-f/b 同级标题间上、下移动
    C-c C-u 跳到上级标题
    C-c C-j 切换大纲浏览状态
  • 编辑:

    M-RET 插入同级标题
    M-S-RET 插入TODO标题
    M-LEFT/RIGHT 标题升、降级
    M-UP/DOWN 标题上、下移
    M-S-LEFT/RIGHT 子树升、降级
    M-S-UP/DONW 子树上、下移
    C-c \* 本行切换为标题、正文
    C-c C-w 跨缓冲区移动标题
    C-c / 搜索
    C-c C-t 设定TODO/DONE…
    C-c C-s 规划时间
    C-c C-d 设置Deadline

文本

  • 链接: description

    C-c l 保存链接
    C-c C-l 创建或修改链接
    C-c C-o 打开链接
    C-c % 记录内部链接地址
    C-c & 跳转到已记录的内部链接
  • 字体:

    1. 粗体
    2. 斜体
    3. 删除线
    4. 下划线
    5. 下标: H2 O
    6. 上标: E=mc2
    7. 等宽: GITGIT

表格

  • 移动

    C-c C-c 调整表格,不移动光标
    TAB 移动到下一区域
    S-TAB 移动到上一区域
    RET 移动到下一行
  • 编辑

    M-LEFT/RIGHT 移动列
    M-UP/DOWN 移动行
    M-S-LEFT/RIGHT 删除、插入列
    M-S-UP/DOWN 删除、插入行
    C-c - 插入水平分割线
    C-c RET 插入水平分割线并进入下一行
    C-c ^ 根据当前列排序

列表

TAB 折叠
M-RET 插入列表项
M-S-RET 插入复选框列表项
C-RET 插入标题项
M-S-UP/DOWN 移动列表项
M-LEFT/RIGHT 升、降级列表项
M-S-LEFT/RIGHT 升、降级列表项及其子项
C-c C-c 改变复选框状态
C-c - 更换列表标记
S-LEFT/RIGHT 更换列表标记

标记

C-c C-q 设置tag
C-c \\ 按照tag搜索标题
C-c / m 搜索并以树显示
C-c a m 按tag搜索多文件

内容原数据

以 #+ 开始,标记文档内容。

    #切换正常分行
    #+BEGIN_VERSE

    #引用、左右均有部分缩进
    #+BEGIN_QUOTE

    #居中
    #+BEGIN_CENTER

    #代码
    #+BEGIN_SRC java