emac介绍

开源界流行一句话:现今有三种编辑器,一是 Emacs,二是 VIM,再者就是其它。

Emacs 项目

Emacs 实质上是一组文本编辑器的集合。

GNU Emacs 是 GNU 项目的一部分,GNU Emacs 官方手册描述它是一个“灵活的,可高度订制
的,自行文件编制的,实时显示的编辑器”,他也应该是最广泛引用的 Emacs。除此之外,
还有 XEmacs 等等。

其实,Emacs 开发早在 19 世纪 70 年代就在麻省理工AI实验室里开始了(想想这款编辑器的
历史有多长)。Emacs 的起名有两种说法,一中较为普遍,就是 Edit MACroS,另外一种则
称之为 E with MACroS,这里的 'E' 代指更早使用的一种编辑器,它缺乏宏编辑能力。

第一款在 Unix 跑的类 Emacs 软件是在 1982 年的开发的 Gosling Emacs,作者是 James
Gosling,听起来是不是很熟悉?对,Gosling 是 NeWS 的创始人,JAVA 的生父。

1984 年,FSF 掌门人 Rechard Stallman 开始在 GNU Emacs 工作了,这时候的 GNU Emacs
基于 Gosling Emacs,但是他为 GNU Emacs 提供了全新的真正的 Lisp 语言解析器,这样
也几乎修改了所有的源代码。而后,GNU Emacs 成为初生的 GNU 项目的第一个发布软件,
它由 C 编写,提供了 Emacs Lisp 作为其拓展语言(由文本编辑软件提供了语言实现,酷
吧~)。最初广泛分布的版本是 1985 年出现的 15.34(记住,2 到 12 的版本号是不存在
地!直接从 1.x.x 到了 13)。

GNU Emacs 的维护人在 2008 年由大神 Richard Stallman 转交到了 Stefan Monnier 和
Chong Yidong。


Emacs 哲学

早先的 Emacs 是一个 TECO 编辑器的宏编辑组件,它由 Richard Stallman 和 Guy
L. Steele, Jr 开发。他的创意来自于 Steele, Dave Moon Richard Greenblatt, Charles
Frankston 等人编写的 TECMAC 和 TMACS 编辑器。尽管现在有多个版本的 Emacs 存在,但
是 1984 年度由 Stallman (他参与维护到 2008 年)编写的 GNU Emacs 和 1991 年开始
的子项目 XEmacs 最为流行。他俩都使用一种强大的扩展语言 Emacs Lisp —— 它允许
Emacs 处理多元化的任务,包括编写文档,编译计算机程序,浏览网页等等。

很多初学 Emacs 的人,就像初学 Linux 一样,可能都遇到很大的门槛。对,操作系统从
Windows 下向 Linux 迁移很费力气,但是文本编辑工具也是一样,这一点也不夸张。引用
一些大牛的话说:用 Emacs 就像是一架脚踏车,你可以骑在上面观看 NBA,但那得你自己
架一个电视机,并且自行提供电力。

现今 Emacs 已经强大到无以复加的地步,别说什么语法高亮,语言模式了,Emacs 摇身一
变成为一个 IDE,他可以管理文件(M-x dired),读新闻,邮件和 RSS 供稿(M-x gnus),甚
至还有心理医生,看图模式,玩俄罗斯方块(M-x tetris)等等等等。很多人把 Emacs 视为
一个操作系统,而非简单的一个编辑器。


(Emacs 初始界面)


是不是觉得一个编辑器太过复杂了呢?Emacs 有必要作这么多呢?没错,Emacs 可以作的事
情很多很多,但重要的一点,就是 Emacs 可以高度定制的,而且是由你来订制。这个现实
是很残酷,当你除此打开 Emacs 的时候,你就只能看到 Emacs 板着白色的面孔,工具栏的
图标像素极少,很象是为偏执的程序员使用的东西。啊对,如果你要是在 Shell 里面打开
他,甚至不知道怎么关闭这个生僻的编辑器。

对,Linux 下面的工具就是这样,功能似乎很强,但是表面上粗糙不堪,用户体验一塌糊涂
(针对 Windows 用户)。如果你能够有信心接受这样一个软件,即可来到 Emacs 的世界。


Emacs 术语

在接手 Emacs 之前,我们可以看看 Emacs 的一些术语,这可以让我们有板有眼的向别人介
绍这个东东。

Chord
    Emacs 是可以灵活的捕捉你的键盘动作,包括按下和释放按键。而一个可以释放而
    且可重复性按键组合,就是一个 chord。注意 Emacs 有两种修饰前缀,一个是
    Ctrl,记作 `C-',一个是 Alt,记作`M-'。那么`C-x' 就可以成为一个 chord,
    操作为 Ctrl+x。

Keysequence
    键盘序列,它可以直接绑定到一个命令上,执行一个功能。Emacs 正是使用这样一
    个方式来实现日常操作的。键盘序列包括了四种混合方式:
    * 一组按键按放的序列,这样的一组序列可以是不带修饰前缀的按键,和同时按下
    的一个或者几个带修饰按键的 chord 序列集合。
    比如 `C-x 3'(Ctrl+x, 3)执行横向展开一个 buffer。
    * 一个鼠标按键或者滚轮动作序列。
    * 一个菜单选择,包括菜单栏选择。
    * 一个工具栏图标选择。

Buffer
    打开一个文本,就是一个 buffer,所有的编辑行为都在 buffer 下面完成。

Frame
    Emacs 的窗口是在一个 frame 里面显示的(可以视为 Emacs 外面的窗口)。

MiniBuffer
    特殊的 buffer,比如 Emacs 的状态栏就是一个 MiniBuffer。

MajorMode
    为每一个文本类型配备一个主编辑模式,比如标准文本,将会是`text-mode'。
    C/C++代码文本的默认主模式是 `c-mode',还有 `tex-mode',`po-mode' 等等。
    一个模式可以配置自己的命令规则,键盘绑定,缩进方式等等。

Mark
    Mark 是为复制等操作准备的文本下的操作方案(`M-!')。

一些基本操作
    这里将不会对基本操作作过多详述,只给出一些必须的命令,免得你手忙脚乱。当
    然,你可以使用 `C-h b' 来查看所有的按键绑定。

C-h C-h     打开所有的 help 页面索引
C-h b        查看所有的按键绑定
C-x-C-c        退出 Emacs(看到连贯的`-'了吗?这可是一个 chord)
C-x-C-f        打开文件到一个buffer
C-x-C-s        保存当前 buffer
C-x s        保存现有所有的 buffer
C-x k        关闭当前 buffer。
C-x 0        关闭当前 buffer window!并不是关闭 buffer 哦
C-x 1        展开当前 buffer window 到整个 Emacs Frame
C-x 2        纵向展开一个 buffer
C-x 3        横向展开一个 buffer


Emacs 配置

每个人心中都有一个汉姆雷特,那 Emacser 手中也必定有一个极具个性化的 Emacs。Emacs
所有的一切都将会由使用者来定义。

Emacs 采用 Emacs Lisp 作为它的拓展语言,他的所有拓展和配置也都用 Lisp 语言来完成。
咱们先来看看简单的配置。
(本人没有任何 Lisp 语言根基,所用的配置搜集自网上^_^)

首先,来点直观点的,改变他的外观。
    ;; 这可是注释哦
    (set-cursor-color "wheat")
    (set-foreground-color "wheat")
    (set-background-color "DarkSlateGray")
    (tool-bar-mode -1) ;; 禁用工具栏
然后立刻就变成这个样子:



一些总体选项
    (setq display-time-24hr-format t)
    (display-time) ;; 显示 24 小时制时间
    (setq inhibit-startup-message t) ;; 禁止每天日常的信息
    (mouse-wheel-mode t) ;; 禁用滚轮
    (setq visible-bell t) ;; 错误铃声提示
    (setq default-major-mode 'text-mode) ;; 默认主编辑模式
    (add-hook 'text-mode-hook 'turn-on-auto-fill)    ;; 加上模式钩子:autofill
    (setq inhibit-eol-conversion 'gb2312-dos) ;;
    (fset 'yes-or-no-p 'y-or-n-p) ;; 使用 y/n 来回复确认
    (setq x-select-enable-clipboard t) ;; 使用外置粘贴板
    (set-scroll-bar-mode nil) ;; 禁止滚动条
    (setq scroll-margin 2
          scroll-conservatively 10000) ;; 滚动幅度
    (setq kill-ring-max 200)
    (setq column-number-mode t)
    (setq default-fill-column 80)
    (setq require-final-newline t) ;; 默认添加行尾空格,C99?

计算机设计语言文本的设置
    (require 'php-mode)
    (require 'cc-mode)
    ;(setq tab-width 4 indent-tabs-mode nil)
    (setq c-default-style "linux") ;; 使用 Linux 内核的编码风格
    (setq tab-width 8)
    (c-toggle-auto-hungry-state 1)
    (defconst please-read-document-c-style
    '("ellemtel" (c-basic-offset . 8)
       )
    )
    (c-add-style "readdocument" please-read-document-c-style)
    ;;(c-set-style "readdocument")
    (global-font-lock-mode 1) ;; 打开语法高亮

各种变成模式的代码折叠
    (load-library "hideshow")
    ;;(add-hook 'c-mode-common-hook 'doxymacs-mode)
    ;;(add-hook 'c++-mode-common-hook 'doxymacs-mode)
    (add-hook 'c-mode-hook
       (lambda ()
          (hs-minor-mode)
          (setq mslk-c++-key (make-keymap))
          (local-set-key "\C-j" mslk-c++-key)
       (define-key mslk-c++-key "\C-h" 'hs-toggle-hiding))
    )
    (add-hook 'c++-mode-hook 'hs-minor-mode)
    (add-hook 'java-mode-hook 'hs-minor-mode)
    (add-hook 'perl-mode-hook 'hs-minor-mode)
    (add-hook 'php-mode-hook 'hs-minor-mode)
    (add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)

来看一下 C 代码模式下的 Emacs。



介绍到此,再来看看 Emacs 的一些拓展。


Emacs 拓展

Emacs 的拓展仍旧是由 Emacs Lisp 编写的,作为脚本语言,拓展可以轻松的使用`M-x'的
`load-path'命令加载。Emacs 搜索库的路径包含在 load-path 变量里。
如果你不想每次都手工加载,就需要在 .emacs 里完成此项目设置。
    (setq load-path (cons "~/path/to/library" load-path))

接下来推荐几个拓展:

wb-line-number.el
    美观大方的行号显示拓展。

xcscope
    检查 C 代码文件信息的拓展。需要安装 dev-util/cscope。
    这个包非常重要,检查 C 方法的定义,追踪函数执行路径都提供了较为简单的实
    现。

multi-gud
    GDB 的多窗口支持

cedet
    CEDET: Collection of Emacs Development Tools。
    包括了 EIEIO(Emacs的图形化支持),Semantic(代码补齐),Speedbar(Lisp编写的
    文件浏览器)等等使用工具。

ecb
    Emacs source code browser。可以自动划分 Emacs 窗口,像极了一个 IDE。

tabbar
    多标签拓展,使用鼠标可以点选其他 buffer。

展示一下带有 ecb 的 Emacs(点击查看大图)


最后希望大家玩的愉快@!



引用
1. Emacs 官方网站
[ LINK ] [url]http://www.gnu.org/software/emacs/[/url]

2. 下载 Emacs(包括 Windows 版本)
[ LINK ] [url]http://ftp.gnu.org/pub/gnu/emacs/[/url]

3. Emacs Wiki
[ LINK ] [url]http://www.emacswiki.org/[/url]

4. Emacs Wiki 的 LISP 拓展下载仓库
[ LINK ] [url]http://www.emacswiki.org/cgi-bin/wiki/ElispArea[/url]

5. 几个拓展和我的 .emacs 配置样式,包括本文中提到的 wb-line-number, multi-gud,
php-mode,session, tabbar。

转载于:https://blog.51cto.com/jetshi0125/93267

本文链接:https://my.lmcjl.com/post/6158.html

展开阅读全文

4 评论

留下您的评论.