什么是 Emacs

Emacs

An extensible, customizable, free/libre text editor — and more.

Emacs 是...

  • 学会了Emacs,你就可以:

    1. 一个快速、好用、高度自定义的编辑器。
    2. 天哪,不知不觉就也会写一点Lisp了。
    3. 认识很多朋友。
GNU Emacs

Emacs 可以写什么

  • 直接说说不能写什么吧。

残酷的事实

  • 并不能完成除了编辑器之外所有的事情。
  • 你愿意用鼠标的话,没有人拦住你。
  • 学不会是不可能的。

怎么介绍 Emacs 给大家

  • 常规功能: 成为一个好的编辑器和 IDE
  • 大杀器: 别人都没有的我有
  • 花哨功能: 有点想知道是那个淡散的人写的

IDE: 日常介绍

  • 快速编辑 C-p/f/w/n ;; 系列
  • 窗口分割 C-x 123 ;; 系列
  • 工程浏览 projectile 和 neo-tree
  • M-x shell
  • 任意绑定按键

IDE: 查找替换

  • I-search
  • query-replace-regexp query-\([a-z]*\)-regexp xx-\1-yy
  • regex-builder
  • rgrep
  • projectile-find-file

IDE: tramp 编辑远端文件/切换权限编辑

例如,直接通过 ssh 编辑远端文件,sudo 身份编辑本地文件。

C-x f /ssh:user@host:path
C-x f /sudo::/etc/hosts

参考:

Tramp Mode

IDE: git 和 ediff

  • magit
  • ediff

IDE: 代码跳转和识别

  • TAGS 跳转:

生成 TAGS

etags `find . -name "*.[chS]"`
etags `find . -name "*.h" -o "*.cpp"`
etags `find . -name "*.[he]rl"`

载入 TAGS:

M-x visit-tags-table

一般用法:

M-. %% 跳转
M-* %% 返回跳转
C-u M-. %% 下一个位置

IDE: 对 Go 特别友好的支持

在 go-mode, auto-complete, go-autocomplete,同时安装好 gofmt 和 gocode。

(require 'go-mode)
(add-hook 'before-save-hook 'gofmt-before-save)

(require 'auto-complete-config)
(require 'go-autocomplete)

(add-hook 'go-mode-hook
          '(lambda() (setq tab-width 4)
         (linum-mode 1)
         (auto-complete-mode t)))
提示: Emacs 对代码的跳转补全依赖第三方语法分析工具,如果有工具,就能够很好的接入。

COOL: ELPA

Emacs > 24加入了自己的包管理,绝对是炫酷)。

记得首先设置路径。

(add-to-list 'package-archives
  '("popkit" . "http://elpa.popkit.org/packages/"))

然后 M-x list-package

COOL: Emacs Lisp

只要你能数清括号,就能学会 Lisp :D

  • Lisp的7个公理
  • 数据类型: 数字/字符串/列表/数组/符号
  • 求值
  • 函数
  • 特有操作对象: 缓冲区/窗口/文件/文本

ELisp: 为什么说 Emacs 是 ELisp 写的。

ELisp 是一门的语言。并且支持 GC。
丰富的库。
几乎所有的扩展程序都是纯 ELisp 程序。

ELisp: 配置即代码

(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(prefer-coding-system 'utf-8)

(defconst *is-a-mac* (eq system-type 'darwin))

ELisp: 大文件处理

(defun large-file-hook ()
  "If the size of given file is lager than 2 MB, to make the buffer read only."
  (when (> (buffer-size) (* 2 1024 1024))
(setq buffer-read-only t)
(buffer-disable-undo)
(buffer-disable-undo)
(linum-mode 0)
(font-lock-mode 0)
(fundamental-mode)))

COOL: 字体配置

针对不同的字符配置不同的字体。
(when (and (eq system-type 'gnu/linux))
  (set-face-attribute 'default nil :family "Ubuntu mono" :height 160)

  (dolist (charset '(kana han symbol cjk-misc bopomofo))
    (set-fontset-font (frame-parameter nil 'font)
      charset (font-spec :family "Noto Sans CJK TC light"
      :height 160))))

无聊小玩意儿

  • info/woman 阅读文档
  • web/图片/pdf/word (eww)
  • tetris/snake/pong cd /usr/share/emacs/*/lisp/play
  • doctor

还在等什么,赶紧开始学习吧。

C-x h, t ;; 查看自带的教程。

推荐

一个非常好的参考资料。

A reasonable Emacs config
Emacs Lisp 简明教程

秦川
6 声望3 粉丝

September 3rd 2019.


引用和评论

0 条评论