Emacs基础知识简介

运维 系统运维
学习过Emacs对Emacs有点经验用户都知道, 随着对Emacs的了解的不断深入, 越来越觉得Emacs是一款非常值得学习的软件。为了便于Emacs初学者的学习,本文介绍了Emacs软件的基本概念、学会看Emacs的文档以及会一些Emacs软件简单的配置等内容,希望能够对读者有所帮助。

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

知道Emacs的基本概念

1.buffer

缓冲区. Emacs并不直接对文件进行操作, 它是把文件加载进buffer, 用户直接操作buffer, 只有当用户确定把buffer中所做的修改写人文件时, Emacs才把buffer中的内容写入文件. buffer实际上就是一个内存缓冲区, 这和一般编辑器中都一样, 应该很好理解.

2.window

窗口. 由于Emacs很早就诞生了, 它的窗口概念和现在基于窗口的操作系统中的窗口概念不是一样的. Emacs中的窗口是用来显示buffer的一个区域. 它并不像操作系统中的窗口拥有自己的标题栏,系统菜单栏.

3.frame

Emacs中的frame就是操作系统中的窗口.

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

4.Emacs Lisp

Emacs最基础的部分是用c写的,其他部分都是用Emacs Lisp语言写的,Emacs Lisp语言是基于lisp语言的. lisp是LISt Processor的缩写, 即链表处理语言, 所以lisp语言的操作都是基于链表的, 它的语法也是链表结构, 链表***个元素表示函数名, 其他元素是参数, 比如通常语言中的a+b, 在lisp就是(+ a b)

5.mode

mode有major mode和minor mode之分, 每个缓冲区对应一个major mode, 也只有一个major mode, 但是可以有多个minor mode. Emacs对每一种文件都有一个mode.

6.命令

你对Emacs所有的操作都是对Emacs的命令的调用。比如,你在text-mode里,当你按下任何字母键进行编辑的时候,实际上是调用的emacs的命令self-insert-command.

7.快捷键

Emacs中Control键用C表示,Alt键用M表示, 即: C-c表示Control C, M-x表示Alt x.

除掉以Alt键开头的,比如Alt a,Emacs中的快捷键基本上都有一个前缀,Emacs中最多的快捷键前缀就是C-x,C-c,前缀表示,你不必要一起按下前缀和后缀,可以先按下前缀,Emacs会等待你按下剩余的快捷键,这样Emacs中的快捷键按起来非常的方便。

8.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中的变量, 函数都有文档. 对于大多数情况都够用了.

1.查看变量的值和文档

  1. C-h v (describe-variable) 

2.查看函数的文档

  1. C-h f (describe-function)  

3.查看face的文档

  1. M-x describe-face  

4.查看某个mode的文档

  1. C-h m (describe-mode) 

刚开始学习某个mode的时候, 可以用C-h m看看当前buffer对应的主mode和副mode的文档, 这个文档一般都会包括mode中的命令和快捷键列表.

5.查看Emacs中某个快捷键对应的命令

  1. C-h k (describe-key)  

6.查看某个命令对应的快捷键

  1. C-h w (where-is)  

7.查看当前buffer所有的快捷键列表

  1. C-h b (describe-bindings)  

8.查看当前buffer中以某个快捷键序列开头的快捷键列表

<待查看的快捷键序列> C-h,比如你想查看当前buffer中所有以C-c开头的快捷键列表,按C-c C-h就可以了。

9.查看Emacs函数的代码

  1. find-function  

10.查看变量的代码

  1. find-variable  

11.查看face的代码

  1. find-face-definition   
  2. M-x apropos 

查看包含某个关键词的函数,变量,face

会些简单的配置

1.执行Elisp代码

在某条语句后面按C-x C-e (eval-last-sexp)可以执行那条语句

M-x eval-buffer 可以执行当前buffer内的Elisp代码

选中一个region后, M-x eval-region可以执行这个region内的代码

2.安装插件

Emacs的插件一般都是一个以el为后缀名的文件, 把这个文件下载下来后放到一个目录, 比如~/emacs/lisps, 然后执行下面这两条语句:

  1. list 'load-path "~/emacs/lisps" 

3.快捷键定制

全局绑定global-set-key, 绑定某个mode的快捷键用define-key. global-set-key的定义为:

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

  1. (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即可, 对于上面的例子这样写:

 
  1. (define-key c++-mode-map (kbd "C-j") 'goto-line) 

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

4.简单的颜色定制

  1. (set-background-color "black") ;; 使用黑色背景  
  2.  
  3. (set-foreground-color "white") ;; 使用白色前景  
  4.  
  5. (set-face-foreground 'region "red")  ;; 区域前景颜色设为红色  
  6.  
  7. (set-face-background 'region "blue") ;; 区域背景色设为蓝色  

Emacs基础知识只是先让大家对Emacs软件有一个基本了解,这样在学习Emacs时能够更加容易。而有关Emacs的知识还有待于大家在底下多搜索一些资源主动去学习和掌握,希望本文能够对大家有所帮助。

责任编辑:韩亚珊 来源: 博客转载
相关推荐

2011-05-31 13:52:22

口令CiscoIOS

2011-05-31 13:50:14

CiscoIOS

2011-05-31 13:50:17

CiscoIOS

2011-05-31 13:15:03

路由器CiscoIOS

2010-06-02 13:03:20

MySQL数据库

2011-05-31 13:50:11

路由器CiscoIOS

2011-05-31 13:15:05

路由器IOSCisco

2015-05-28 15:16:19

交换机

2023-05-12 16:04:10

2014-06-17 16:17:58

Docker 1.0Docker

2010-08-16 09:42:23

无线局域网

2009-09-23 11:07:11

Hibernate基础

2010-07-16 10:53:30

Perl基础

2009-04-17 14:22:40

XPathXML基础

2015-06-01 13:35:43

数据中心DCIM

2023-07-04 07:31:06

MapReduce数据处理编程模型

2009-04-10 09:35:00

WCDMA基础无线网络

2010-07-16 11:22:31

Perl

2014-08-20 10:15:45

2011-03-29 14:11:20

Cacti基础知识
点赞
收藏

51CTO技术栈公众号