什么是 Emacs
An extensible, customizable, free/libre text editor — and more.
Emacs 是...
-
学会了Emacs,你就可以:
- 一个快速、好用、高度自定义的编辑器。
- 天哪,不知不觉就也会写一点
Lisp
了。 - 认识很多朋友。
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 简明教程
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。