您的位置:首页 > 其它

Emacs 入门指引

2016-05-12 17:39 281 查看
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/。支持的操作系统有:

    
GNUFreeBSDSolarisMS Windows
GNU/LinuxNetBSDMac OS XMS DOS
GNU/kFreeBSDOpenBSDAIX 
获取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 0delete-window关闭一个窗口
C-x 1delete-other-windows关闭其他窗口
C-x 2split-window-vertically垂直分割窗口成两部分
C-x 3split-window-horizontally水平分割窗口成两部分
C-x oother-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");  
}  

完成后,'M-x',再输入'save-buffer',或者'C-x C-s'。
然后切换到eshell或者shell窗口,输入'gcc hello.c -o hello',如果是windows则是'gcc hello.c -o hello.exe'
再执行它'./hello',或者windows输入'hello',即可,最后如图所示:



如果没有gcc,有python,那么就如上图所示的那样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: