【记录】我的 emacs 使用笔记


— 2018.3: 最新:

弃了弃了。。。

现在用mvim(spf13) + VSCode + IDE


俗话说, 工欲善其事必先利其器, 博主坚信一个程序猿应该拥有一个自己用的顺手的编辑器.

于是博主在折腾完 Sublime Text 3, Atom, Vim. 三大编辑器之后, 幸运的遇到了Spacemacs, 对于博主这种在vim 和 emacs 纠结大半年的人来说, 简直是一种解放.

博主认为, vim 的优势在于它的灵活编辑方式, emacs 优势在于它的超强扩展能力. Spacemacs 很强势的把两者合二为一, 让博主认为, 这才是我的真爱.

对于有emacs 或者 vim 基础的人来说, 直接跳到 Spacemacs 中可以说是零成本, 开箱即用. 但是毕竟它将成为博主谋生的工具, 所以博主打算把emacs 和 vim 都过一遍, 便于以后对 Spacemacs 更进一步的配置.

emacs 基础

Emacs Lisp :

Emacs Lisp 是 emacs 所用的编程语言, 强烈建议每一个 emacs 用户都把它的教程给过一遍. 这里有一篇家喻户晓的简明教程, 大家可以花30分钟过一遍: Emacs Lisp (Learn X in Y minutes)

tips : 这个网站叫做 Learn X in Y minutes , 顾名思义, 推荐大家在学习一门新的语言的时候可以先在这个网页里面过一个简明教程, 对这个语言了解一个大概之后再去学习它会简单很多.

基础操作 :

为了方便的操作 emacs, 推荐大家把 Capslock 键改成 Control 键.

常见的操作符号如下:

  • M(eta) 在Mac下为option键
  • s(uper) 在Mac环境下为左Command键
  • S(hift)
  • C(trl)

获取帮助 :

Emacs 是一个富文本编辑器(Self document, extensible editor), 在使用过程中, 碰到问题可以随时查阅文档, 下面有三种常用的查阅文档的方法:

  • C-h k 寻找快捷键的帮助信息.
  • C-h v 寻找变量的帮助信息.
  • C-h f 寻找函数的帮助信息.

Start Hacking

配置文件模块化:

我们通常将不同的配置代码放在不同的文件当中, 使其模块化, 这样将来我们维护起来就会方便很多. 比如下面的方式:

1
2
3
4
├── auto-save-list # 自动生成的保存数据
├── elpa # 下载的插件目录
├── init.el # 我们的配置文件
└── recentf # 最近访问的文件列表

博主个人还喜欢将我的配置文件纳入版本控制系统中, 这样以保重拥有一个最稳定的生产环境.

1
$ git init

由于Elisp中并没有命名空间(Namespace), 所以命名规则就变得尤为的重要, 我们一般常用的命名规则如下:

1
2
3
4
5
6
7
8
#自定义变量可以使用自己的名字作为命名方式(可以是变量名或者函数名)
my/XXXX

#模式命名规则
ModeName-mode

#模式内的变量则可以使用
ModeName-VariableName

Major Mode 和 Minor Mode 详解:

每一个文件类型都有一个Major Mode支持, 它提供了比如语法高亮, 缩进规则等基本的编辑功能. 然后由 Minor Mode 提供扩展的增强型功能.

在 Emacs 中, Major Mode 又分一下三种:

  • text-mode : 用于编辑文本文件.
  • special-mode : 特殊模式(很少见).
  • prog-mode : 所有编程语言的父模式.

在每一个模式(mode)中它的名称与各个变量还有函数都是有特定的命名规则,比如所有的模式都被命名为 ModeName-mode , 里面所设置的快捷键则为 ModeName-mode-key-map, 而所有的钩子则会被命名为 ModeName-mode-hook.

文件的加载方式:

在这一部分我们首先需要知道的是什么是 features 。在 Emacs 中每一个 feature 都是一个 Elisp 符号,用于代表一个 Lisp 插件(Package)。

当一个插件调用 (provide 'symbol_name) 函数时,Emacs 就会将这个符号加入到 features 的列表中去。

接着我们需要弄明白的是 load-file , load , require , autoload 之间的区别。(他们之间区别的链接已经再前面贴过了,你也可以在这里找到之前同样的链接)

简单来说, load-file 用于打开某一个指定的文件,用于当你不想让 Emacs 来去决定加载某个配置文件时( .el 或者 .elc 文件)。

load 搜索 load-path 中的路径并打开第一个所找到的匹配文件名的文件。此方法用于你预先不知道文件路径的时候。

require 加载还未被加载的插件。首先它会查看变量 features 中是否存在所要加载的符号如果不存在则使用上面提到的 load 将其载入。(有点类似于其他编程语言中的 import

autoload 用于仅在函数调用时加载文件,使用此方法可以大大节省编辑器的启动时间。

总结

这篇文章主要是把 emacs 基本配置和使用理念给总结了下, 之后会有几篇后续文章把 spacemacs 的使用给记录下来.