SlideShare a Scribd company logo
Emacs 入门
      @yinhm

 GZLUG GZTechParty


 March 20, 2011




   @yinhm   Emacs   1/49
GNU Emacs is an extensible,
customizable text editor —and
            more.




           @yinhm   Emacs   2/49
介绍

一点历史




       @yinhm   Emacs   3/49
介绍

 一点历史
• 1970 年,
        (Editing MACroS)诞生于 MIT 人工智能实验室




               @yinhm   Emacs   3/49
介绍

  一点历史
• 1970 年,
        (Editing MACroS)诞生于 MIT 人工智能实验室
• 1984 年,Stallman 开发 GNU Emacs 用来代替 Gosling Emacs




                  @yinhm   Emacs   3/49
介绍

  一点历史
• 1970 年,
        (Editing MACroS)诞生于 MIT 人工智能实验室
• 1984 年,Stallman 开发 GNU Emacs 用来代替 Gosling Emacs
• 1985 年 3 月 20 日,Version 13 作为第一个 public release




                    @yinhm   Emacs   3/49
介绍

  一点历史
• 1970 年,
        (Editing MACroS)诞生于 MIT 人工智能实验室
• 1984 年,Stallman 开发 GNU Emacs 用来代替 Gosling Emacs
• 1985 年 3 月 20 日,Version 13 作为第一个 public release
• Stallman 维护至 2008 年,现在的维护者是 Stefan Monnier
  和 Chong Yidong




                    @yinhm   Emacs   3/49
介绍

  一点历史
• 1970 年,
        (Editing MACroS)诞生于 MIT 人工智能实验室
• 1984 年,Stallman 开发 GNU Emacs 用来代替 Gosling Emacs
• 1985 年 3 月 20 日,Version 13 作为第一个 public release
• Stallman 维护至 2008 年,现在的维护者是 Stefan Monnier
  和 Chong Yidong
• 2009 年,23.1 发布,支持 Xft




                    @yinhm   Emacs   3/49
介绍

  一点历史
• 1970 年,
        (Editing MACroS)诞生于 MIT 人工智能实验室
• 1984 年,Stallman 开发 GNU Emacs 用来代替 Gosling Emacs
• 1985 年 3 月 20 日,Version 13 作为第一个 public release
• Stallman 维护至 2008 年,现在的维护者是 Stefan Monnier
  和 Chong Yidong
• 2009 年,23.1 发布,支持 Xft
• 最新版本 23.3




                    @yinhm   Emacs   3/49
GPL 授权,GNU 项目的第一个计
        划。




       @yinhm   Emacs   4/49
介绍


特性




     @yinhm   Emacs   5/49
介绍


 特性
• 编辑器:高亮,各种语言支持




           @yinhm   Emacs   5/49
介绍


 特性
• 编辑器:高亮,各种语言支持
• 高可定制,高可扩展(Emacs Lisp)




              @yinhm   Emacs   5/49
介绍


 特性
• 编辑器:高亮,各种语言支持
• 高可定制,高可扩展(Emacs Lisp)
• 各种扩展(Mode):邮件,日历,GTD,IRC




              @yinhm   Emacs   5/49
介绍


 特性
• 编辑器:高亮,各种语言支持
• 高可定制,高可扩展(Emacs Lisp)
• 各种扩展(Mode):邮件,日历,GTD,IRC
• 支持本星球上大多数操作系统




              @yinhm   Emacs   5/49
介绍


  特性
• 编辑器:高亮,各种语言支持
• 高可定制,高可扩展(Emacs Lisp)
• 各种扩展(Mode):邮件,日历,GTD,IRC
• 支持本星球上大多数操作系统
• Self-documenting




                     @yinhm   Emacs   5/49
介绍


  特性
• 编辑器:高亮,各种语言支持
• 高可定制,高可扩展(Emacs Lisp)
• 各种扩展(Mode):邮件,日历,GTD,IRC
• 支持本星球上大多数操作系统
• Self-documenting
• 还可以煮咖啡:CoffeeMode




                     @yinhm   Emacs   5/49
Emacs VS vi




  @yinhm   Emacs   6/49
...endless...




  @yinhm   Emacs   7/49
拜 Emacs 教




  @yinhm   Emacs   8/49
To join the Church of Emacs, you need only say the
Confession of the Faith three times:


 There is no system but GNU,
 and Linux is one of its kernels.




                         @yinhm   Emacs   9/49
学习 Emacs




 @yinhm   Emacs   10/49
基本概念




       @yinhm   Emacs   11/49
基本概念


Buffer




        @yinhm   Emacs   12/49
基本概念


 Buffer
• 持有正在编辑的文件




              @yinhm   Emacs   12/49
基本概念


 Buffer
• 持有正在编辑的文件
• 打开文件创建对应的文件关联 Buffer




              @yinhm   Emacs   12/49
基本概念


 Buffer
• 持有正在编辑的文件
• 打开文件创建对应的文件关联 Buffer
• 启动 Emacs 自动打开 *scrach* Buffer,不和文件关联




                @yinhm   Emacs   12/49
基本概念


 Buffer
• 持有正在编辑的文件
• 打开文件创建对应的文件关联 Buffer
• 启动 Emacs 自动打开 *scrach* Buffer,不和文件关联
• 启动 Emacs 自动打开名为 *Messages* Buffer,类似 STDOUT




                 @yinhm   Emacs   12/49
基本概念


 Buffer
• 持有正在编辑的文件
• 打开文件创建对应的文件关联 Buffer
• 启动 Emacs 自动打开 *scrach* Buffer,不和文件关联
• 启动 Emacs 自动打开名为 *Messages* Buffer,类似 STDOUT
• 察看文档打开特殊点的 *Help* Buffer




                 @yinhm   Emacs   12/49
基本概念


 Buffer
• 持有正在编辑的文件
• 打开文件创建对应的文件关联 Buffer
• 启动 Emacs 自动打开 *scrach* Buffer,不和文件关联
• 启动 Emacs 自动打开名为 *Messages* Buffer,类似 STDOUT
• 察看文档打开特殊点的 *Help* Buffer
• 可以列出、选择、关闭 Buffers




                 @yinhm   Emacs   12/49
基本概念


Minibuffer




            @yinhm   Emacs   13/49
基本概念


 Minibuffer
• 输入命令区域




             @yinhm   Emacs   13/49
基本概念


 Minibuffer
• 输入命令区域
• 命令读取参数




             @yinhm   Emacs   13/49
基本概念


 Minibuffer
• 输入命令区域
• 命令读取参数
• 文件列表选择




             @yinhm   Emacs   13/49
基本概念


 Minibuffer
• 输入命令区域
• 命令读取参数
• 文件列表选择
• 可以 TAB 补全




              @yinhm   Emacs   13/49
基本概念


 Minibuffer
• 输入命令区域
• 命令读取参数
• 文件列表选择
• 可以 TAB 补全
• 可以编辑




              @yinhm   Emacs   13/49
基本概念


  Minibuffer
• 输入命令区域
• 命令读取参数
• 文件列表选择
• 可以 TAB 补全
• 可以编辑
• Minibuffer 历史




                 @yinhm   Emacs   13/49
基本概念



Major mode




             @yinhm   Emacs   14/49
基本概念



 Major mode
• 只能有一个




              @yinhm   Emacs   14/49
基本概念



 Major mode
• 只能有一个
• 确定主要编辑模式




              @yinhm   Emacs   14/49
基本概念



  Major mode
• 只能有一个
• 确定主要编辑模式
• python, ruby, lisp, yaml 等




                        @yinhm   Emacs   14/49
基本概念



Minor modes




              @yinhm   Emacs   15/49
基本概念



 Minor modes
• 配合 Major mode 可以有多个




                @yinhm   Emacs   15/49
基本概念



 Minor modes
• 配合 Major mode 可以有多个
• 提供辅助编辑功能




                @yinhm   Emacs   15/49
基本概念



  Minor modes
• 配合 Major mode 可以有多个
• 提供辅助编辑功能
• 比如 auto-complete, yasnippet




                     @yinhm     Emacs   15/49
用 Emacs,需忘记鼠标,无视菜单




       @yinhm   Emacs   16/49
快捷键控制一切




  @yinhm   Emacs   17/49
EMACS = ?




  @yinhm   Emacs   18/49
EMACS =
Escape-Meta-Alt-Control-Shift




           @yinhm   Emacs   19/49
快捷键


标记方式




       @yinhm   Emacs   20/49
快捷键


  标记方式
• [Ctrl] 键以大写 C 表示,[Meta] 键 [Alt] 键以大写 M 表示




                 @yinhm   Emacs   20/49
快捷键


  标记方式
• [Ctrl] 键以大写 C 表示,[Meta] 键 [Alt] 键以大写 M 表示
• C-f 表示:按住 CRTL 键再输入 f




                 @yinhm   Emacs   20/49
快捷键


  标记方式
• [Ctrl] 键以大写 C 表示,[Meta] 键 [Alt] 键以大写 M 表示
• C-f 表示:按住 CRTL 键再输入 f
• C-x-b 表示:按住 CRTL 键再输入 x,释放,输入 b




                 @yinhm   Emacs   20/49
快捷键


  标记方式
• [Ctrl] 键以大写 C 表示,[Meta] 键 [Alt] 键以大写 M 表示
• C-f 表示:按住 CRTL 键再输入 f
• C-x-b 表示:按住 CRTL 键再输入 x,释放,输入 b
• C-x C-s 表示:按住 CRTL 键再输入 x,释放,按住 CTRL 后
  输入 s




                 @yinhm   Emacs   20/49
快捷键

文件操作




       @yinhm   Emacs   21/49
快捷键

文件操作

 Keystroke   Emacs Command Name         Standard Name
 C-x C-f     find-file                    打开...




                   @yinhm   Emacs   21/49
快捷键

文件操作

 Keystroke   Emacs Command Name         Standard Name
 C-x C-f     find-file                    打开...
 C-x k       kill-buffer                 关闭




                   @yinhm   Emacs   21/49
快捷键

文件操作

 Keystroke   Emacs Command Name         Standard Name
 C-x C-f     find-file                    打开...
 C-x k       kill-buffer                 关闭
 C-x C-s     save-buffer                 保存




                   @yinhm   Emacs   21/49
快捷键

文件操作

 Keystroke   Emacs Command Name           Standard Name
 C-x C-f     find-file                      打开...
 C-x k       kill-buffer                   关闭
 C-x C-s     save-buffer                   保存
 C-x C-c     save-buffers-kill-terminal    保存并退出




                     @yinhm   Emacs   21/49
快捷键

文件操作

 Keystroke   Emacs Command Name           Standard Name
 C-x C-f     find-file                      打开...
 C-x k       kill-buffer                   关闭
 C-x C-s     save-buffer                   保存
 C-x C-c     save-buffers-kill-terminal    保存并退出
 C-x ←       previous-buffer               前一个 Tab




                     @yinhm   Emacs   21/49
快捷键

文件操作

 Keystroke   Emacs Command Name           Standard Name
 C-x C-f     find-file                      打开...
 C-x k       kill-buffer                   关闭
 C-x C-s     save-buffer                   保存
 C-x C-c     save-buffers-kill-terminal    保存并退出
 C-x ←       previous-buffer               前一个 Tab
 C-x →       next-buffer                   下一个 Tab




                     @yinhm   Emacs   21/49
快捷键

光标控制(1)




          @yinhm   Emacs   22/49
快捷键

光标控制(1)

 Keystroke   Emacs Command Name            Standard Key
 C-v         scroll-up                     PageDn




                  @yinhm   Emacs   22/49
快捷键

光标控制(1)

 Keystroke   Emacs Command Name            Standard Key
 C-v         scroll-up                     PageDn
 M-v         scroll-down                   PageUp




                  @yinhm   Emacs   22/49
快捷键

光标控制(1)

 Keystroke   Emacs Command Name            Standard Key
 C-v         scroll-up                     PageDn
 M-v         scroll-down                   PageUp
 C-p         previous-line                 ↑




                  @yinhm   Emacs   22/49
快捷键

光标控制(1)

 Keystroke   Emacs Command Name            Standard Key
 C-v         scroll-up                     PageDn
 M-v         scroll-down                   PageUp
 C-p         previous-line                 ↑
 C-n         next-line                     ↓




                  @yinhm   Emacs   22/49
快捷键

光标控制(1)

 Keystroke   Emacs Command Name            Standard Key
 C-v         scroll-up                     PageDn
 M-v         scroll-down                   PageUp
 C-p         previous-line                 ↑
 C-n         next-line                     ↓
 C-b         backward-char                 ←




                  @yinhm   Emacs   22/49
快捷键

光标控制(1)

 Keystroke   Emacs Command Name            Standard Key
 C-v         scroll-up                     PageDn
 M-v         scroll-down                   PageUp
 C-p         previous-line                 ↑
 C-n         next-line                     ↓
 C-b         backward-char                 ←
 C-f         forward-char                  →




                  @yinhm   Emacs   22/49
快捷键

光标控制(2)




          @yinhm   Emacs   23/49
快捷键

光标控制(2)

      Keystroke   Emacs Command Name
      M-f         forward-word




                  @yinhm   Emacs   23/49
快捷键

光标控制(2)

      Keystroke   Emacs Command Name
      M-f         forward-word
      M-b         backward-word




                  @yinhm   Emacs   23/49
快捷键

光标控制(2)

      Keystroke   Emacs Command Name
      M-f         forward-word
      M-b         backward-word
      C-a         move-beginning-of-line




                  @yinhm   Emacs   23/49
快捷键

光标控制(2)

      Keystroke   Emacs Command Name
      M-f         forward-word
      M-b         backward-word
      C-a         move-beginning-of-line
      C-e         move-end-of-line




                  @yinhm   Emacs   23/49
快捷键

光标控制(2)

      Keystroke   Emacs Command Name
      M-f         forward-word
      M-b         backward-word
      C-a         move-beginning-of-line
      C-e         move-end-of-line
      M-a         backward-sentence




                  @yinhm   Emacs   23/49
快捷键

光标控制(2)

      Keystroke   Emacs Command Name
      M-f         forward-word
      M-b         backward-word
      C-a         move-beginning-of-line
      C-e         move-end-of-line
      M-a         backward-sentence
      M-e         forward-sentence




                  @yinhm   Emacs   23/49
快捷键

编辑操作




       @yinhm   Emacs   24/49
快捷键

编辑操作

Keystroke   Emacs Command Name        Standard Name
C-k         kill-line




                   @yinhm   Emacs   24/49
快捷键

编辑操作

Keystroke   Emacs Command Name        Standard Name
C-k         kill-line
C-M-@       mark-sexp




                   @yinhm   Emacs   24/49
快捷键

编辑操作

Keystroke   Emacs Command Name        Standard Name
C-k         kill-line
C-M-@       mark-sexp
C-w →       kill-region               剪切




                   @yinhm   Emacs   24/49
快捷键

编辑操作

Keystroke   Emacs Command Name        Standard Name
C-k         kill-line
C-M-@       mark-sexp
C-w →       kill-region               剪切
M-w ←       kill-ring-save            拷贝




                   @yinhm   Emacs   24/49
快捷键

编辑操作

Keystroke   Emacs Command Name        Standard Name
C-k         kill-line
C-M-@       mark-sexp
C-w →       kill-region               剪切
M-w ←       kill-ring-save            拷贝
C-y ←       yank                      粘贴




                   @yinhm   Emacs   24/49
快捷键

编辑操作

Keystroke   Emacs Command Name        Standard Name
C-k         kill-line
C-M-@       mark-sexp
C-w →       kill-region               剪切
M-w ←       kill-ring-save            拷贝
C-y ←       yank                      粘贴
C-/ ←       undo                      撤销




                   @yinhm   Emacs   24/49
快捷键


其它

Keystroke   Emacs Command Name               Standard Name
M-x         execute-extended-command         执行命令
C-g         keyboard-quit                    取消输入




                    @yinhm   Emacs   25/49
Emacs 速成指南:C-h t




     @yinhm   Emacs   26/49
忘了快捷键?


    记住这个:C-h b




         @yinhm   Emacs   27/49
GNU Emacs Reference Card




         @yinhm   Emacs   28/49
从 emacs-starter-kit 开始




        @yinhm   Emacs   29/49
为什么?




@yinhm   Emacs   30/49
每个人都有一个自己的 Emacs




      @yinhm   Emacs   31/49
很好很强大,很糟很分裂




    @yinhm   Emacs   32/49
emacs-starter-kit 是好的开始




         @yinhm   Emacs   33/49
emacs-starter-kit


  提供什么




               @yinhm   Emacs   34/49
emacs-starter-kit


  提供什么
• 主要针对动态语言
• 合理的配置
• ELPA 包管理
• 支持多种 Emacs 版本




                  @yinhm   Emacs   34/49
emacs-starter-kit


  默认支持语言




               @yinhm   Emacs   35/49
emacs-starter-kit


  默认支持语言
• lisp
• python
• javascript
• perl
• ...




               @yinhm   Emacs   35/49
代码在 github 上,很容易用来创
建自己的分支,扩展其它各种支持




       @yinhm   Emacs   36/49
github 上 Popular Forked 第五名




          @yinhm   Emacs   37/49
还是很分裂,尽量少分裂




    @yinhm   Emacs   38/49
emacs-starter-kit

  我的分支




               @yinhm   Emacs   39/49
emacs-starter-kit

  我的分支
• 超靓主题(来自 emacs-on-rails mode 作者 dima)
• 移植 debian-start,增强启动控制: /emacs.d/init.d/
• ruby-test-mode,rsense 等增强 ruby 支持
• rope, ropemacs 增强 python 支持
• 增强 javascript 支持:flymake
• arc mode
• 更多个人口味...




                    @yinhm   Emacs   39/49
emacs-starter-kit
  补充:从软件仓库安装的包和 Modes




               @yinhm   Emacs   40/49
emacs-starter-kit
  补充:从软件仓库安装的包和 Modes
• emacs23, emacs23-bin-common, emacs23-common
• emacsen-common
• emacs-goodies-el
• css-mode
• erlang-mode
• ess
• html-helper-mode
• mmm-mode
• org-mode
• python-mode


                     @yinhm   Emacs   40/49
emacs-starter-kit


  常用 mode:ido




                @yinhm   Emacs   41/49
emacs-starter-kit


  常用 mode:ido
• 自 emacs2.2 开始并入官方发布
• C-x b 进入当前所有 Buffers 列表
• 替换 C-x C-f 打开文件
• Tab 补全,Fuzz
• http:
  //www.emacswiki.org/emacs/InteractivelyDoThings




                   @yinhm   Emacs   41/49
emacs-starter-kit


  常用 mode:auto-complete




                   @yinhm   Emacs   42/49
emacs-starter-kit


  常用 mode:auto-complete
• 可视界面
• 轻量高效
• 高可扩展,结合各种补全:rope,rsense, gccsence 等
• http://cx4a.org/software/auto-complete/




                   @yinhm   Emacs   42/49
emacs-starter-kit



  常用 mode:yasnippet




                  @yinhm   Emacs   43/49
emacs-starter-kit



  常用 mode:yasnippet
• 代码模版
• 默认支持语言:C, C++, Python, Ruby 以及更多
• 语法受 TextMate 影响




                  @yinhm   Emacs   43/49
emacs-starter-kit



  常用 mode:org




                @yinhm   Emacs   44/49
emacs-starter-kit



  常用 mode:org
• 可以用来 GTD
• 保存 Notes
• 项目管理




                @yinhm   Emacs   44/49
demo




@yinhm   Emacs   45/49
Emacs Lisp(Lisp dialect)




        @yinhm   Emacs   46/49
Emacs lisp


  常见配置可能用到的




              @yinhm   Emacs   47/49
Emacs lisp


  常见配置可能用到的
• nil and t




              @yinhm   Emacs   47/49
Emacs lisp


  常见配置可能用到的
• nil and t
• setq




              @yinhm   Emacs   47/49
Emacs lisp


  常见配置可能用到的
• nil and t
• setq
• quote




              @yinhm   Emacs   47/49
Emacs lisp


  常见配置可能用到的
• nil and t
• setq
• quote
• require




              @yinhm   Emacs   47/49
Emacs lisp


  常见配置可能用到的
• nil and t
• setq
• quote
• require
• hook




              @yinhm   Emacs   47/49
Emacs lisp


  常见配置可能用到的
• nil and t
• setq
• quote
• require
• hook
• local-set-key




                  @yinhm   Emacs   47/49
Questions?




  @yinhm   Emacs   48/49
Links


• http://www.gnu.org/software/emacs/
• http://en.wikipedia.org/wiki/Emacs
• http://en.wikipedia.org/wiki/Editor_war
• St IGNUcius
• GNU Emacs Reference Card
• emacs starter kit
• 我的 emacs starter kit




                         @yinhm   Emacs   49/49
About


        Created in L TEX using the beamer class, TeX Live and Emacs.
                   A



        Published under the Creative Commons Attribution 3.0 License
              http://creativecommons.org/licenses/by/3.0/

                                by @yinhm
                        http://yinhm.appspot.com


                     Document version March 20, 2011




                           @yinhm        Emacs     50/49

More Related Content

PDF
Emacs - COSCUP 2012
PDF
My Emacs Configs
PDF
Emacs intro
PPT
Emacs, a performant IDE for Perl
ODP
Learn Linux: Emacs
PPT
Emacs tutorial
PDF
Emacs Modes I can't work without
PDF
Emacs presentation
Emacs - COSCUP 2012
My Emacs Configs
Emacs intro
Emacs, a performant IDE for Perl
Learn Linux: Emacs
Emacs tutorial
Emacs Modes I can't work without
Emacs presentation

Viewers also liked (7)

PDF
Linux boot process
PPTX
Code4vn - Linux day - linux boot process
PDF
How Emacs changed my life
PPT
Linux booting procedure
PDF
(IDEユーザのための) ClojureのEmacs開発環境について
PDF
我在豆瓣使用Emacs
PPTX
Rhel6 vs rhel7
Linux boot process
Code4vn - Linux day - linux boot process
How Emacs changed my life
Linux booting procedure
(IDEユーザのための) ClojureのEmacs開発環境について
我在豆瓣使用Emacs
Rhel6 vs rhel7
Ad

Similar to Emacs入门 (9)

PDF
Work with Vim
PDF
Emacs Introduction
PDF
VIM入门与进阶
PDF
vim中文权威
PDF
Using vim
PPTX
Vim 101
PPT
Effective_Vim
PPTX
6, vim
PPT
Vim get start_1.0
Work with Vim
Emacs Introduction
VIM入门与进阶
vim中文权威
Using vim
Vim 101
Effective_Vim
6, vim
Vim get start_1.0
Ad

More from yinhm . (6)

PDF
Dart intro
PDF
Write a Google Closure Editor Plugin
ODP
git svn workflow
PDF
Ruby的类和对象模型
PDF
Raemon
PDF
Heroku
Dart intro
Write a Google Closure Editor Plugin
git svn workflow
Ruby的类和对象模型
Raemon
Heroku

Emacs入门