Emacs是什么?
Emacs是一种功能超强的文本处理程序,或者文本编辑器。作者Richard Stallman(主页:http://stallman.org/)。基础部分是使用C语言编写的,其他部分是用Emacs Lisp编写的。深层次的话,C语言构成了emacs的底层,包括Emacs Lisp的解释器。而Emacs Lisp则是负责了Emacs Lisp的建筑物上层,也就是包括我们平时用的扩展、界面等。
Emacs只是一文本编辑器,这和Windows上的Visual Studio等等不同的是,VS集成的是完整的开发功能,包括编译器、编辑器、调试器等等。而Emacs只是一个文本编辑器,当然不要因此而是否定Emacs的强大。Emacs可以做的:
收发电子邮件、通过FTP/TRAMP编辑远程档案、通过Telnet登录主机、上新闻组、登陆IRC和朋友交流
查看日历、撰写文章大纲
对多种编程语言的编辑、调试程序,结合GDB,EDebug等。支持C/C++,Perl,Python,Lisp等等
玩游戏、计算器、记日记
煮咖啡、管理日程,Task,ToDo,约会等、个人信息管理、目录管理
文件比较、阅读info和man文档、浏览网站
他确实只是一个文本处理器,你可以将之视为伪编辑器的操作系统。而这是因为其与unix/linux系统的整合程度而起的,换句说,如果Richard Stallman可以早点开发出内核,而不是等到Linux的话。Linux/Unix的设计思想之一就是:简单,使用足够的小程序来支撑起这世界,而是Emacs所做的就是利用这些工具,来打造自己,完成自己的系统。因而,Emacs强大的另一点是,有足够的扩展,无论是过去的auto-complete或者是现在的Android-mode等等。故而,我们可以在《架构之美》之中看到关于其的介绍,而是他的特性也是如此,滋长的特性是其优势。
也因些,Emacs是Unix世界的两大神器之一,另外一个是Vim/Vi。
Emacs是什么样的?
如图:
Emacs的设计预想是需要时只需要启动一次,然后一直运行着。我们可以使用C-x-2,C-x-3对窗口进行分割,打开多个文件进行编辑。Emacs的三种基本对象是:帧(frame)、窗口(window)、缓冲区(buffer)。
帧是Emacs对计算机图形界面中窗口的称呼。将上图分为三个部分,分别是显示了Emacs的介绍,可浏览的目录列表及展示Lisp交互界面的缓冲区(buffer)。而是最下面的那一行,则是输入命令的地方。
窗口是帧的一部分,要创建一个新的窗口,只能通过将原有窗口分成两个,当关闭某个窗口时,将把空间给邻近的窗口。这样的结果是一个帧中的窗口始终会填满整个帧的内容。只有对键盘命令进行响应,窗口是轻量级的,在使用时会频繁地创建和关闭。
缓冲区是用来保存可编辑的文本内容。Emacs将会把打开的文本内容保存在缓冲区中,但缓冲区中的内容并不一定必须与某个文件关联:它可能包括搜索结果、在线文档,以及刚输入还没有保存到任何文件中的内容。每个窗口将显示某些缓冲区的内容,而一个缓冲区可能保存0个、1个或多个窗口。
还有一个很重要的地方,那就是除了每个窗口底部的模式行以及其他类似的东西,Emacs在向用户显示文本信息时会将其放在缓冲区中,然后将缓冲区的内容显示在某些窗口中。帮助信息、搜索结果、目录列表以及其他类似的的内容,保存在缓冲区中的内容都有相应的名称。
获取Emacs
现在的版本是:24.1,详细可见:http://www.gnu.org/software/emacs/。支持的操作系统有:
GNU | FreeBSD | Solaris | MS Windows |
GNU/Linux | NetBSD | Mac OS X | MS DOS |
GNU/kFreeBSD | OpenBSD | AIX |
获取Emacs
- Windows: http://ftp.gnu.org/pub/gnu/emacs/windows/
- Mac OsX: http://emacsformacosx.com/
- Unix/Linux:可使用自带的软件包管理。例如Ubuntu的:sudo apt-get install Emacs
安装方法:Windows直接解压就可以使用。Ubuntu安装完即可使用,Mac OSX同。如果下载的是源码包 (ftp://ftp.gnu.org/gnu/emacs/),则需要编译。
配置Emacs
Windows下需要对进行Home目录,修改及配置。
- 如果设置了HOME环境变量,那么就用它的值作为home目录~
- 如果存在注册表键值HKCU\SOFTWARE\GNU\Emacs\HOME,就用它的值作为home目录~
- 如果存在注册表键值HKLM\SOFTWARE\GNU\Emacs\HOME,就用它的值作为home目录~(和2的区别是,2只是针对当前用户的注册表路径,3则是针对所有用户)
- 如果存在C:\.emacs,就用C:\作为home目录~
- 如果以上都不存在的话,就使用\Users\\AppData\Roaming作为home目录~(对于XP和较早windows用户,需要到Documents and Settings目录下去找)
Mac OSX,及类Unix系统都是是在默认的用户目录下,也就是HOME下的个人文件夹。默认的emacs配置文件有三个(详细可参考:http://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html即:
- ~/.emacs
- ~/.emacs.el
- ~/.emacs.d/init.el
我们通常用.emacs文件进行配置,不过一些比较主流的是放置于.emacs.d文件夹下。不过虽然是叫配置文件,官方的叫法是初始化文件。网上搜索的,可参考的一些简单的自定义及配置:
- (set-cursor-color “white”)
- ;; 鼠标颜色设置为白色
- (set-mouse-color “white”)
- ;; 设置背景颜色和字体颜色
- (set-foreground-color “white”)
- (set-background-color “darkblue”)
- ;; 设置另外一些颜色:语法高亮显示的背景和主题,区域选择的背景和主题,二次选择的背景和选择
- (set-face-foreground ‘highlight “white”)
- (set-face-background ‘highlight “blue”)
- (set-face-foreground ‘region “cyan”)
- (set-face-background ‘region “blue”)
- (set-face-foreground ‘secondary-selection “skyblue”)
- (set-face-background ‘secondary-selection “darkblue”)
- ;;设置日历的一些颜色
- (setq calendar-load-hook
- ‘(lambda ()
- (set-face-foreground ‘diary-face “skyblue”)
- (set-face-background ‘holiday-face “slate blue”)
- (set-face-foreground ‘holiday-face “white”)))
- ;;外观设置
- ;;去掉工具栏
- (tool-bar-mode nil)
- ;;去掉菜单栏,我将F10绑定为显示菜单栏,万一什么东西忘了,需要菜单栏了可以摁F10调出,再摁F10就去掉菜单
- (menu-bar-mode nil)
- ;;不要滚动栏,现在都用滚轴鼠标了,可以不用滚动栏了
- (scroll-bar-mode nil)
- ;;备份设置
- ;;emacs还有一个自动保存功能,默认在~/.emacs.d/auto-save-list里,这个非常有用,我这里没有改动,具体可以参见Sams teach yourself emacs in 24hours(我简称为sams24)
- ;;启用版本控制,即可以备份多次
- (setq version-control t)
- ;;备份最原始的版本两次,记第一次编辑前的文档,和第二次编辑前的文档
- (setq kept-old-versions 2)
- ;;备份最新的版本五次,理解同上
- (setq kept-new-versions 5)
- ;;删掉不属于以上7中版本的版本
- (setq delete-old-versions t)
- ;;设置备份文件的路径
- (setq backup-directory-alist ‘((“.” . “~/.emacs.tmp”)))
- ;;备份设置方法,直接拷贝
- (setq backup-by-copying t)
- ;;自动补全功能,这事从王垠的网站直接Copy过来的,引用一些他对此的说明
- ;;你可以设置以下 hippie-expand 的补全方式。它是一个优先列表, hippie-expand 会优先使用表最前面的函数来补全
- ;;这是说,首先使用当前的buffer补全,如果找不到,就到别的可见的窗口里寻找,如果还找不到,那么到所有打开的buffer去找,如果还……那么到kill-ring里,到文件名,到简称列表里,到list,…… 当前使用的匹配方式会在 echo 区域显示。
- ;;特别有意思的是 try-expand-line,它可以帮你补全整整一行文字。我很多时后有两行文字大致相同,只有几个字不一样,但是我懒得去拷贝粘贴以下。那么我就输入这行文字的前面几个字。然后多按几下 M-/ 就能得到那一行。
- (global-set-key [(meta ?/)] ‘hippie-expand)
- (setq hippie-expand-try-functions-list
- ‘(try-expand-line
- try-expand-line-all-buffers
- try-expand-list
- try-expand-list-all-buffers
- try-expand-dabbrev
- try-expand-dabbrev-visible
- try-expand-dabbrev-all-buffers
- try-expand-dabbrev-from-kill
- try-complete-file-name
- try-complete-file-name-partially
- try-complete-lisp-symbol
- try-complete-lisp-symbol-partially
- try-expand-whole-kill))
- ;;时间戳设置(time-stamp),设定文档上次保存的信息
- ;;只要里在你得文档里有Time-stamp:的设置,就会自动保存时间戳
- ;;启用time-stamp
- (setq time-stamp-active t)
- ;;去掉time-stamp的警告?
- (setq time-stamp-warn-inactive t)
- ;;设置time-stamp的格式,我如下的格式所得的一个例子:<hans 05/18/2004 12:01:12>
- (setq time-stamp-format “%:u %02m/%02d/%04y %02H02M02S”)
- ;;将修改时间戳添加到保存文件的动作里。
- (add-hook ‘write-file-hooks ‘time-stamp)
- ;;时间显示设置
- ;;启用时间显示设置,在minibuffer上面的那个杠上(忘了叫什么来着)
- (display-time-mode 1)
- ;;时间使用24小时制
- (setq display-time-24hr-format t)
- ;;时间显示包括日期和具体时间
- (setq display-time-day-and-date t)
- ;;时间栏旁边启用邮件设置
- (setq display-time-use-mail-icon t)
- ;;时间的变化频率,单位多少来着?
- (setq display-time-interval 10)
- hvj的讨论和推广emacs贴3:
- 这里继续帖我得hvj-basic-config.el,讲另外一些比较零碎的设置
- 引用:;;启用minibuffer,好像是默认设置吧
- (minibuffer-electric-default-mode 1)
- ;;启用部分补全功能,如输入M-x q r r相当于M-x query-replace-regexp
- (partial-completion-mode 1)
- ;;在minibuffer里启用自动补全函数和变量
- (icomplete-mode 1)
- ;;所有的问题用y/n方式,不用yes/no方式。有点懒,只想输入一个字母
- (fset ‘yes-or-no-p ‘y-or-n-p)
- ;;允许minibuffer自由变化其大小(指宽度)
- (setq resize-mini-windows t)
- ;;当寻找一个同名的文件,自动关联上那个文件?
- (setq uniquify-buffer-name-style ‘forward)
- ;;在emacs读man文档时,使用当前buffer
- (setq Man-notify-method ‘pushy)
- ;;鼠标自动避开指针,如当你输入的时候,指针到了鼠标的位置,鼠标有点挡住视线了
- (mouse-avoidance-mode ‘animate)
- ;;允许自动打开图片,如wiki里面
- (auto-image-file-mode)
- ;;可以操作压缩文档
- (auto-compression-mode 1)
- ;;在minibuffer上面可以显示列号
- (column-number-mode t)
- ;;显示默认的文档的宽度,看起来比较舒服?
- (setq default-fill-column 60)
- ;;指针不要闪,我得眼睛花了
- (blink-cursor-mode -1)
- (transient-mark-mode 1)
- ;;当指针到一个括号时,自动显示所匹配的另一个括号
- (show-paren-mode 1)
- ;;是用滚轴鼠标
- (mouse-wheel-mode t)
- ;;去掉烦人的警告铃声
- (setq visible-bell nil)
- ;;滚动页面时比较舒服,不要整页的滚动
- (setq scroll-step 1
- scroll-margin 3
- scroll-conservatively 10000)
- ;;设定句子结尾,主要是针对中文设置
- (setq sentence-end “\\([?££?£?]\\|??\\|[.?!][]\”‘)}]*\\($\\|[ \t]\\)\\)[ \t\n]*”)
- (setq sentence-end-double-space nil)
- ;;去掉Emacs和gnus启动时的引导界面
- (setq inhibit-startup-message t)
- (setq gnus-inhibit-startup-message t)
- ;;当指针移到另一行,不要新增这一行?d
- (setq next-line-add-newlines nil)
- ;;在文档最后自动插入空白一行,好像某些系统配置文件是需要这样的
- (setq require-final-newline t)
- (setq track-eol t)
- ;;使用C-k删掉指针到改行末的所有东西
- (setq-default kill-whole-line t)
- ;;设定删除保存记录为200,可以方便以后无限恢复
- (setq kill-ring-max 200)
- ;;增大使用查找函数和变量的寻找范围
- (setq apropos-do-all t)
- ;;是用aspell程序作为Emacs的拼写检查成学
- (setq-default ispell-program-name “aspell”)
- ;;使用narrow功能时的一个设置
- (put ‘narrow-to-region ‘disabled nil)
- ;;启动Emacs自动设置为两个窗口(上下各一个)
- (split-window-vertically)
- ;;改变emacs标题栏的标题
- (setq frame-title-format “%b@vj.org”)
- ;;允许emacs和外部其他程序的粘贴
- (setq x-select-enable-clipboard t)
而,我们知道Emacs更主要的是在于其扩展,以及不断增长的特性。我们可以用些来增加一些mode及功能。
使用之前
如果是windows,我们建议安装cygwin。这样可以渐渐摆脱对鼠标的依赖,当然了主要目的是与cygwin整合。
cygwin,以及能做什么
cygwin是一个在windows平台上运行的unix模拟环境;
Cygwin包括了一套库,该库在Win32系统下实现了POSIX系统调用的API;还有一套GNU开发工具集(比如GCC、GDB),这样可以进行简单的软件开发;还有一些UNIX系统下的常见程序。
2001年,新增了X Window System。另外还有一个名为MinGW的库,可以跟Windows本地的MSVCRT库(Windows API)一起工作。MinGW占用内存、硬盘空间都比较少,能够链接到任意软件,但它对POSIX规范的实现没有Cygwin库完备。
Windows的Dos Scripts功能非常薄弱,命令行工具也非常少;如果您对Linux比较熟悉,那么Cygwin可以帮助您在Windows下面使用强大的Bash,以及使用数量繁多的Linux命令,通过Scripts,可以更加高效的完成系统管理工作
如果您刚进入Linux的世界,使用Cygwin可以让你在Windows下面练习Linux的Bash,以及常用工具。而不需要安装Linux,也不用担心Windows被破坏。
安装cygwin
下载setup.exe
安装Cygwin,您需要下载setup.exe,此程序根据您选择的软件包,再从互联网下载所有组件。
官网:http://cygwin.com
点此下载从官网下载setup.exe
安装方法参见:http://www.cygwin.cn/site/install/- 双击setup.exe
- 按照安装提示“下一步”
- 选择从“互联网”安装:
- 选择安装的路径,一般是C:\Cygwin,选择本地临时目录,用于存放下载的软件;选择您连接互联网的方式,一般选“直接连接”就可以了。
- 选择下载源:(选择163镜像)
- 根据安装提示,选择需要安装的软件包,完成安装。
开始使用
启动Emacs
直接打emacs, 如果有X-windows就会开视窗.
如果不想用X 的版本,就用 emacs -nw (No windows)起动.
符号说明
C-X 表示按住CTRL键, 然后按X, 再把CTRL, X一起放开.
M-X META META
在没有META键的电脑上, M-X 等于先按 ESC键, 接着按 X键.
Sun上面META键就是菱形的那个键.
有些系统META键就是ALT键.(或者某一边的ALT键)
C-X或 M-X的X没有大小写分别.
Emacs按键命令基本上是一串C-和M-组成的.
超过两个以上的按键命令, Emacs会在屏幕最下面一行显示你按过什么.
这一行叫作mini buffer
结束Emacs
`C-x C-c‘ — 退出Emacs
或者在minibuffer输入’kill-emacs‘,在输入前需要按下M-x
如果当前有需要保存的文件,那么应该是’save-buffers-kill-emacs‘
开始之前
- 如果是类Unix系统,请确定装有GCC,CC或者类似的编译器,当然有其他语言的也可以。比如Python
- Windows如果没有GCC,试着使用cygwin安装。
- 当以上两个都不想时,试着用python,perl或者其他脚本语言。
开始工作
启动Emacs,用你喜欢或者习惯的方式。Windows可以加emacs加入环境变量,即PATH
Emacs的操作方式
- 使用鼠标操作,很明显体现不了Emacs的优势
- 各种C-x M-x相结合,比较难记
- 使用命令行,例如find-file是等同于C-x C-f,也就是字面如find-file所表示。
因此相比之下,第二种和第三种方式相结合会比较顺手
开始工作
常用的窗口操作,右边是命令按M-x可以输入,等同于快捷键
C-x 0 | delete-window | 关闭一个窗口 |
C-x 1 | delete-other-windows | 关闭其他窗口 |
C-x 2 | split-window-vertically | 垂直分割窗口成两部分 |
C-x 3 | split-window-horizontally | 水平分割窗口成两部分 |
C-x o | other-window | 切换到另一个窗口 |
so,让我们开始分割成三部分,先垂直再水平,也就是先’C-x 3′ ‘C-x 2’,如图所示:
然后在第一个窗口,’M-x’然后’find-file’,或者’C-x C-f’,结果如图所示:
接着在切换到另一个窗口(’C-x o’,或者’M-x’,然后输入’other-window’),再输入eshell,或者shell,如果是windows会切换到cmd也就是命令提示符,如图。
然后,新建个文件,’find-file’,再输入路径和文件名,比如我的’D:\Desktop\hello.c。
接着’M-x’,输入’C-mode’,也就是开始C模式,有语法加亮等功能。
接着输入:
- #include<stdio.h>
- int main(){
- printf(“Hello,world\n”);
- }
然后切换到eshell或者shell窗口,输入’gcc hello.c -o hello’,如果是windows则是’gcc hello.c -o hello.exe’
再执行它’./hello’,或者windows输入’hello’,即可,最后如图所示:
如果没有gcc,有python,那么就如上图所示的那样。