Emacs初学者必知必会

转自:http://emacser.com/emacs-beginner-must-know.htm

自己学习Emacs已3年由余, 对Emacs也算有点经验. 随着对Emacs的了解的不断深入, 越来越觉得Emacs是一款非常值得学习的软件. 所以我经常向自己的朋友推荐Emacs. 自己也认识一些Emacs初学者. 从他们经常问的一些问题中感觉, 好多初学者都没有好好的学过Emacs, 也有可能是Emacs的资料不是很多, 好资料更少, 他们没有找到好的学习方法吧. 所以, 我想就我所了解的, 写一些初学者应该知道的东西, 或者说, 初学者掌握了这些知识和方法后, 学习Emacs起来更加容易吧. 另外, 初学者如果有兴趣的话, 可以看看本人另外一篇拙作《致Emacs初学者》, 希望能对你们有所帮助.

知道Emacs的基本概念

  • buffer
    缓冲区. Emacs并不直接对文件进行操作, 它是把文件加载进buffer, 用户直接操作buffer, 只有当用户确定把buffer中所做的修改写人文件时, Emacs才把buffer中的内容写入文件. buffer实际上就是一个内存缓冲区, 这和一般编辑器中都一样, 应该很好理解.
  • window
    窗口. 由于Emacs很早就诞生了, 它的窗口概念和现在基于窗口的操作系统中的窗口概念不是一样的. Emacs中的窗口是用来显示buffer的一个区域. 它并不像操作系统中的窗口拥有自己的标题栏,系统菜单栏.
  • frame
    Emacs中的frame就是操作系统中的窗口.

buffer是文件的内存表示, windows则是显示buffer的区域, 一个frame中可以有多个window, Emacs则可以有多个frame.

  • Emacs Lisp
    Emacs最基础的部分是用c写的,其他部分都是用Emacs Lisp语言写的,Emacs Lisp语言是基于lisp语言的. lisp是LISt Processor的缩写, 即链表处理语言, 所以lisp语言的操作都是基于链表的, 它的语法也是链表结构, 链表第一个元素表示函数名, 其他元素是参数, 比如通常语言中的a+b, 在lisp就是(+ a b)
  • mode
    mode有major mode和minor mode之分, 每个缓冲区对应一个major mode, 也只有一个major mode, 但是可以有多个minor mode. Emacs对每一种文件都有一个mode.
  • 命令
    你对Emacs所有的操作都是对Emacs的命令的调用。比如,你在text-mode里,当你按下任何字母键进行编辑的时候,实际上是调用的emacs的命令self-insert-command.
  • 快捷键
    Emacs中Control键用C表示,Alt键用M表示, 即: C-c表示Control C, M-x表示Alt x.
    除掉以Alt键开头的,比如Alt a,Emacs中的快捷键基本上都有一个前缀,Emacs中最多的快捷键前缀就是C-x,C-c,前缀表示,你不必要一起按下前缀和后缀,可以先按下前缀,Emacs会等待你按下剩余的快捷键,这样Emacs中的快捷键按起来非常的方便。
  • keymap
    键盘映射. Emacs的快捷键是通过keymap来控制的. 有全局和局部的keymap. 每个mode都会有一个自己的局部的keymap, 局部的keymap会覆盖全局的keymap, 另外如果对应的major mode有开启的minor mode, 而且这个minor mode有keymap的话, 这个minor mode的keymap会覆盖major mode的keymap.

学会看文档

Emacs的文档非常丰富, 有Elisp自己的自文档, 还有更详细的info. Elisp中的变量, 函数都有文档. 对于大多数情况都够用了.

  • 查看变量的值和文档
    C-h v (describe-variable)
  • 查看函数的文档
    C-h f (describe-function)
  • 查看face的文档
    M-x describe-face
  • 查看某个mode的文档
    C-h m (describe-mode)
    刚开始学习某个mode的时候, 可以用C-h m看看当前buffer对应的主mode和副mode的文档, 这个文档一般都会包括mode中的命令和快捷键列表.
  • 查看某个快捷键对应的命令
    C-h k (describe-key)
  • 查看某个命令对应的快捷键
    C-h w (where-is)
  • 查看当前buffer所有的快捷键列表
    C-h b (describe-bindings)
  • 查看当前buffer中以某个快捷键序列开头的快捷键列表
    <待查看的快捷键序列> C-h,比如你想查看当前buffer中所有以C-c开头的快捷键列表,按C-c C-h就可以了。
  • 查看函数的代码
    find-function
  • 查看变量的代码
    find-variable
  • 查看face的代码
    find-face-definition
  • M-x apropos
    查看包含某个关键词的函数,变量,face

会些简单的配置

  • 执行Elisp代码
    1. 在某条语句后面按C-x C-e (eval-last-sexp)可以执行那条语句
    2. M-x eval-buffer 可以执行当前buffer内的Elisp代码
    3. 选中一个region后, M-x eval-region可以执行这个region内的代码
  • 安装插件
    Emacs的插件一般都是一个以el为后缀名的文件, 把这个文件下载下来后放到一个目录, 比如~/emacs/lisps, 然后执行下面这两条语句:

     

    ?View Code LISP
     
    1
    2
    
    (add-to-list 'load-path "~/emacs/lisps")
    (require 'pluginname)
  • 快捷键定制
    全局绑定global-set-key, 绑定某个mode的快捷键用define-key. global-set-key的定义为:

     

    ?View Code LISP
     
    (global-set-key key command)

    比如想把C-j绑定到”到达指定行上”(goto-line), 这样就可以了:

    ?View Code LISP
     
    (global-set-key (kbd "C-j") 'goto-line)

    kbd是Emacs的宏, 把快捷键转换为Emacs的内部按键表示. 然后执行上面那条语句, 就会使你的配置生效. 然后你可以用C-h k检查一下你的定制是否成功了.
    如果对于比较复杂的快捷键, 比如Control x F3, 改怎么写呢? 按C-h k(describe-key), 然后再按下Control x F3, Emacs会出现一个”C-x “, 这个就是你要写到kbd宏里面的内容.
    如果你想对某个特定模式比如c++-mode进行快捷键定制, 用define-key即可, 对于上面的例子这样写:

    ?View Code LISP
     
    (define-key c++-mode-map (kbd "C-j") 'goto-line)

    define-key第一个参数map一般为mode后面直接加”-map”

  • 简单的颜色定制
    ?View Code LISP
     
    1
    2
    3
    4
    5
    
    (set-background-color "black") ;; 使用黑色背景
    (set-foreground-color "white") ;; 使用白色前景
     
    (set-face-foreground 'region "red")  ;; 区域前景颜色设为红色
    (set-face-background 'region "blue") ;; 区域背景色设为蓝色
posted @ 2012-03-18 18:53  hnrainll  阅读(614)  评论(0编辑  收藏  举报