自己学习Emacs已3年由余, 对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代码
- 在某条语句后面按C-x C-e (eval-last-sexp)可以执行那条语句
- M-x eval-buffer 可以执行当前buffer内的Elisp代码
- 选中一个region后, M-x eval-region可以执行这个region内的代码
- 安装插件
Emacs的插件一般都是一个以el为后缀名的文件, 把这个文件下载下来后放到一个目录, 比如~/emacs/lisps,
然后执行下面这两条语句:
1 2
| (add-to-list 'load-path "~/emacs/lisps") (require 'pluginname) |
- 快捷键定制
全局绑定global-set-key, 绑定某个mode的快捷键用define-key. global-set-key的定义为:
(global-set-key key command) |
比如想把C-j绑定到”到达指定行上”(goto-line), 这样就可以了:
(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即可, 对于上面的例子这样写:
(define-key c++-mode-map (kbd "C-j") 'goto-line) |
define-key第一个参数map一般为mode后面直接加”-map”
- 简单的颜色定制
1 2 3 4 5
| (set-background-color "black") ;; 使用黑色背景 (set-foreground-color "white") ;; 使用白色前景 (set-face-foreground 'region "red") ;; 区域前景颜色设为红色 (set-face-background 'region "blue") ;; 区域背景色设为蓝色 |
VN:F [1.9.0_1079]
阅读(695) | 评论(0) | 转发(0) |