设为首页收藏本站

河南工业大学论坛|工大小窝|河南工业大学BBS|惜缘论坛|2006-2021工大小窝一直在你身边!

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2048|回复: 4
打印 上一主题 下一主题

linux编辑器之---emacs

[复制链接]
跳转到指定楼层
1
发表于 2008-12-5 12:15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Linux Emacs 的世界



开源界流行一句话:现今有三种编辑器,一是 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)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2
 楼主| 发表于 2008-12-5 12:15:39 | 只看该作者
来看一下 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] http://www.gnu.org/software/emacs/

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

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

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

5. 几个拓展和我的 .emacs 配置样式,包括本文中提到的 wb-line-number, multi-gud,
php-mode,session, tabbar。
[
LINK] http://www.box.net/shared/pmplsevdww

3
 楼主| 发表于 2008-12-5 12:17:37 | 只看该作者
在Windows下使用Emacs:
本页目录在Windows下使用Emacs 安装Emacs 安装auctex 安装mule-gbk 安装aspell 安装Mew 用gnuserv给Emacs插上翅膀

top在Windows下使用Emacstop安装Emacs
  • http://nqmacs.sourceforge.net 下载emacs的Windows编译版本,包括两个文件 emacs-21.3.50.1-20050130c-w32.zipemacs-21.3.50.1-20050130-lisp.zip
  • emacs-21.3.50.1-20050130c-w32.zip 解压缩到想要放置的目录,这里为 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32
  • emacs-21.3.50.1-20050130-lisp.zip 也解压缩在这个目录,然后设置环境变量 HOME=D:\Program Reserved\emacs-21.3.50.1-20050130c-w32这样在以后 .emacs.d 目录和 .emacs 文件就都在 $HOME 目录下面了,但是这个方法并不好,因为设置 $HOME 会影响 CygwinMSYS 等很多东西,所以最好的方法是在注册表中设置 HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\HOME=%emacs_dir%
  • 需要自己添加的el文件放在 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32\site-lisp 里面即可
top安装auctex
  • http://www.gnu.org/software/auctex/ 下载auctex,然后解压到任意目录,不过不要解压到 $HOME 目录下面,这里解压缩到 D:\auctex
  • 然后可以根据 INSTALL.windows 这个文件进行安装,用cygwin安装的步骤如下: $cd d: (或者$cd /cygdrive/d)$cd auctex$./configure --prefix=d:/"Program Reserved"/emacs-21.3.50.1-20050130c-w32             --with-emacs=d:/"Program Reserved"/emacs-21.3.50.1-20050130c-w32/bin/emacs.exe$make$make install(注意上面对于有空格的目录要加双引号,同时用/而不是\,用d:而不是/cygdrive/d)
    这样,可以在 $HOME\site-lisp 目录下面看到生成了 auctex 目录,同时在 $HOME 目录下面也生成了一个 var 目录
  • $HOME\.emacs 文件中添加 (require 'tex-mik)(setq TeX-electric-escape t)这样就可以正常使用auctex了
top安装mule-gbk安装mule-gbk后可以显示更多的汉字,比如朱镕基的“镕”,如果不用mule-gbk是无法正确显示的

  • http://mule-gbk.sourceforge.net/ 下载mule-gbk,然后解压到任意目录,不过不要解压到 $HOME 目录下面,这里解压缩到 D:\mule-gbk-0.1.2004080701 ,然后仿照auctex的安装方法即可,用cygwin安装的步骤如下: $cd d: (或者$cd /cygdrive/d)$cd mule-gbk-0.1.2004080701$./configure$make$make lispdir=d:/"Program\ Reserved"/emacs-21.3.50.1-20050130c-w32/site-lisp install(注意上面和auctex不同,有空格的目录名空格前要加入一个\)
    最后一条命令中, lispdir 指定的是el文件安装的目录
  • 现在在 .emacs 中加入 (setq w32-charset-info-alist    (cons '("gbk" w32-charset-gb2312 . 936) w32-charset-info-alist))(set-w32-system-coding-system 'chinese-gbk)(set-selection-coding-system 'chinese-gbk)(set-keyboard-coding-system 'chinese-gbk)(set-language-environment 'chinese-gbk)(setq locale-coding-system 'chinese-gbk)(setq current-language-environment "Chinese-GBK")呵呵,中文问题解决了
top安装aspell
  • http://aspell.net/win32/ 下载Windows下的aspell安装程序和词典,这里下载的是 Aspell-0-50-3-3-Setup.exeAspell-en-0.50-2-3.exe
  • 安装即可,这里安装到 D:\Program Reserved\Aspell
  • 设置环境变量,将 D:\Program Reserved\Aspell\bin 加入到 $Path
  • http://kdstevens.com/~stevens/ispell-page.html 下载最新的 ispell.el ,这里下载的是 ispell.el-3.6 ,将其改名为 ispell.el 放到 $HOME\site-lisp 目录下
  • .emacs 中加入 (setq-default ispell-program-name "aspell")(setq-default ispell-local-dictionary "american")(global-set-key (kbd "") 'ispell-complete-word)这样就可以使用拼写检查功能了,但是绑定到F8上的complete-word命令还是无法使用,这个需要解决
4
 楼主| 发表于 2008-12-5 12:18:05 | 只看该作者
top安装Mew
  • http://www.mew.org/Win32/ 下载Mew的Windows版本这里下载的是Mew 4.2,文件为 MEW42W0.ZIP
  • 将 MEW42W0.ZIP 解压,这里解压到 E:\Download\Temp\MEW42W0\mew-4.2
  • 安装前需要设置好两个环境变量:一个是 $HOME 变量,当然这在安装emacs的时候已经设置好了,另一个是 $TZ 变量,这个是时区,设置为 JST-8
  • 注意emacs在Windows下需要执行 $HOME\bin\addpm.exe 来进行一下安装,否则Mew会认为没有安装emacs,然后在cygwin下进行编译: $cd e:$cd Download/Temp/MEW42W0/mew-4.2/$./configure$make
  • 在命令行下执行 >mew然后就根据提示来安装吧
  • 注意我安装完成之后发现mew所用的图片都没有安装,将解压出来的mew-4.2目下的 etc 目录复制到 D:\Program Reserved\emacs-21.3.50.1-20050130c-w32\site-lisp\mew\ 就可以了
  • 注意mew中的邮件默认是utf-8编码的,所以需要在mule-gbk的环境下使用utf-8支持,具体看一下 mule-gbk-0.1.2004080701.tar.gz 中的 README.unicode ,具体方法为在在 .emacs 文件中添加 ;; Unicode support, for Emacs CVS (21.3.50) only(when (fboundp 'utf-translate-cjk-mode)  ;; Load modified utf-translate-cjk-mode  (require 'gbk-utf-mode)  ;; Turn on utf-translate-cjk-mode  (utf-translate-cjk-mode 1)  ;; Setup X selection for unicode encoding  (setq x-select-request-type '(UTF8_STRING COMPOUND_TEXT TEXT STRING)))这样,就可以存取中文Unicode编码的文件了,具体使用方法是:
    C-x RET f utf-8 RET将当前缓冲区的编码改为utf-8然后保存
    C-x RET c utf-8 RET C-x C-s filename RET在保存时转换文件格式
    C-x RET r utf-8 RET用这个命令重新以utf-8编码加载文件
  • mew的设置和使用请看这里 top用gnuserv给Emacs插上翅膀  通常情况下,用Emacs编辑文件需要先启动Emacs,然后C-x C-f,再输入文件的路径,这是很麻烦的,尤其对于用惯了图形界面的人更是不便,这个问题可以用gnuserv解决,这里是Windows下编译好的gnuserv。
      gnuserv的安装非常简单,将上面压缩包中的 gnuserv.el 放到 $HOME/site-lisp 目录下,再把release文件夹下的几个可执行文件放到 $HOME/bin 目录下,然后在.emacs中加入:
    (require 'gnuserv)(gnuserv-start)
这样就可以用 gnuclientw.exe 打开文件了,再建立一个 gnuclientw.exe 的快捷方式放到“Documents and Settings\username\SendTo”目录下,就可以用右键的“发送到”菜单把文件传输到Emacs中编辑了。
   gnuclientw.exe 默认是用一个新的frame打开文件,在.emacs中添加下面的命令可以设置在原来的frame中打开文件:
;; 在当前frame打开(setq gnuserv-frame (selected-frame));; 打开后让emacs跳到前面来(setenv "GNUSERV_SHOW_EMACS" "1")  如果你喜欢在新的frame中打开文件,绑定下面几个控制frame的函数,操作frame会简单一些: ;; 关闭一个frame,绑定到 C-F4(global-set-key [(control f4)] 'delete-frame);; 在两个frame中切换(global-set-key [(control tab)] 'other-frame)(global-set-key [(control shift tab)] '(lambda ()                                       (interactive)                                       (other-frame -1)))
5
 楼主| 发表于 2008-12-5 12:19:53 | 只看该作者
明天介绍linux编辑器之sed编辑器,也是我们介绍的最后一个编辑器,其他编辑器可以根据爱好去发现,去学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|工大小窝 ( 豫ICP备06010094号  

GMT+8, 2024-4-30 15:57 , Processed in 0.150647 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表