Emacs Lisp 学习

9.19'22

介绍

Emacs 是和 Vim 一样,学习曲线较大、但能高度定制的编译器。内核是函数式脚本语言Emacs Lisp(Lisp 的一种方言实现)的解释器。

The extensible, customizable, self-documenting real-time display editor

安装环境和入门

学习

理论加实践。一开始需要多动手练习基础操作。

Emacs Lisp 语法

Emacs 打开后进入介绍页面,按q后进入*scratch*临时文件,可以执行 Lisp 语句。在每个语句末尾按C-x C-e即可。

Lisp 是一门函数式编程语言。

S-expression

Lisp 语句由listatom组成。这两者统称为 s-expression(symbolic expression, sexpr or sexp)。 简单来说是括号括起来由符号组成的表达式,内部元素(atom)用空格隔开,彼此可以嵌套。是一种树结构。

符号、数字、字符串、变量、函数

(defun greeting (name)
 (let ((your-name "Bastien"))
  (insert (format "Hello %s!\n\nI am %s."
           name          ; the argument of the function
           your-name     ; the let-bound variable "Bastien"))))

(greeting "you")

定义函数

(defun function-name (arguments...)
 "optional-documentation..."
 (interactive argument-passing-info) ;optional
 body...)

设置变量的几种方式

(setq [sym var]...)
(setq name "you")

(let [varlist] body...)
(let ((name "you"))
 (print name))

控制结构

Symbol

nil: 代表空列表 () 或逻辑值false

t: 代表逻辑值true

Specail Form

if 语法

(if true-or-false-test
 action-for-true
 action-for-false)

打印变量

(print sym)
(message sym)

变量处理

(insert sym)
(format sym)

Quoting

默认情况下,符号或 list 按变量处理,会计算每个 list 表达式。使用 quote 可以直接使用字面量,避免计算。

Quoting: literal(not evaluated)

Expression: evaluated

':用于符号或 list

#':用于函数

(+ 1 3 1)
;; => 5

(apply #'+ '(1 3 1))
;; => 5
;; + 和 (1 3 1) 作为字面量参数传给 apply 函数

Backquote

Backquote结构可以quote列表,并可以选择性地计算(evaluate)部分元素。

默认与quote相同的效果

'(a list of (+ 2 3) elements)

`(a list of (+ 2 3) elements)
; (a list of (+ 2 3) elements)

使用,标记需要计算的值

`(a list of ,(+ 2 3) elements)
; (a list of 5 elements)

基本快捷键

C-g:退出命令

C-h:查看帮助

C-h v <variable_name>: 查看变量

M-x: 运行命令、函数

C-x C-e: 运行当前 buffer

扩展

packages + configurations = layer

Emacs 下的 Vim 模式

evil 是 Emacs 的 vi 扩展。

evil-guide

Emacs 导航:neotree

Emacs 文件查找:helm

A Package in a league of its own: Helm

Emacs 术语

Frame: 整个应用

Window: 屏幕的一部分

Buffer: 处理文件或进程的接口

Mode: 适用于特定文件类型的按键绑定集合

State: 类似于 Vi 中的 Mode,例如 Normal、Insert、Visual 等等

Daemon 模式快速启动

EmacsAsDaemon

  • 启动服务端

      emacs --daemon
    
  • 启动客户端

      emacsclient <file_name>
    
      emacsclient -c
    
      # -c,--create-frame
    

预配置版本

Spacemacs

安装

  • 先备份和重命名原始的配置文件,以让新的配置生效。旧的配置文件:~/.emacs

    mv ~/.emacs ~/.emacs.bak

  • 安装

    git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

    新的配置文件夹:~/.emacs.d。启动后会自动生成由用户修改的配置文件:~/.spacemacs

  • 添加环境变量 HOME,设置成 ~ 的值(主要用于 Windows 环境)

添加自定义配置

~/.spacemacs

(defun dotspacemacs/user-config ()

 (define-key evil-normal-state-map (kbd "<down>") 'evil-window-down)
 (setq-default dotspacemacs-auto-save-file-location 'original)

 )
📖