注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

My Unix World

不要迷恋Unix,Unix只是计算世界很小的一部分!

 
 
 

日志

 
 

Emacs文章摘集  

2008-11-17 14:04:43|  分类: L-Emacs |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
VIM和Emacs比较
----------------------------------------------------------------------------
VIM和Emacs的相似之处:

    首先都是全功能的编辑器
    缩进,重新编排格式
    语法高亮
    无限制的"撤消"和"重做"
    多个剪切,粘贴板
    拼写检查
    多语言支持
    可扩展性强
        宏,函数
        自定义键
        自己定制.emacs和.vimrc(很多人的这两个文件都写得跟天书似的,可能主要考察一下记忆力)
    操作文本串,多行,矩形块
    几乎可以识别任何文本文件类型
    没有行长度和文件大小的限制(操作系统有限制除外)
    自动识别UNIX,MAC,MSWIN的行结尾符
    二进制文件编辑
    都有很好的帮助和用户手册以及免费的电子书
    都有TTY和GUI版本
    可以在很多操作系统上运行(*nix,win32,Mac...)
    都有父老兄弟:Emacs有Xemacs及其派生的Epsilon,JOVE等;VIM有其老头子VI和兄弟Nvi,Vile,Elvis等
    都是FREE SOFTWARE,可以方便地得到

---------------------------------------------------------------------------------------

VIM 和 Emacs的不同:

    vim主要设计用来写程序的,当然也可操作众多的文本文件;Emacs主要设计用来文本操作的
    vim体积小启动快;相反,Emacs体积大,启动慢
    VIM专注于文本编辑;而Emacs功能强大:除了VIM常干的事外,还有排版,收发邮件,IDE,播放MP3,日程安排,系统管理,浏览网页,甚至教你做一道精美的川菜....,功能强大到BT的地步. 故若说VIM是一种工具的话,则Emacs则可认为是一种"生活平台"
    VIM学习曲线陡峭而较短;Emacs 学习曲线平缓而较长
    VIM是有模式的编辑器;而Emacs是没有模式的(现在的很多编辑器和word处理器都是无模式的)
    "无模式"的优缺点
        常见而显得亲近
        对于标准的下拉菜单式GUI程序,容易适应
        其命令有复杂的语法和很难敲的多个键的组合,因键盘上的键是有限的,所以恨不得加个脚踏
        甚至有些键在标准键盘上都没有
    "有模式"的优缺点
        容易迷惑现在在那个模式下:Normal mode ,Visual mode ,Select mode ,Insert mode ,Command-line mode, ex mode ; ^X mode, operator-pending mode, Replace mode, Insert normal mode, Insert Visual mode, Insert Select mode我能想起的mode就这些---这么多,头都大了.
        在模式间频繁转换是令人讨厌的
        可以有更多的按键用于命令
        几乎所有的时间手指一般都停留在"normal position",故而效率高
    Emacs的GUI更容易操作大体积的文本工作;gvim与Xwindow接合得更好--看起来感觉更舒服一些:好看一些的字体,好一点的语法高亮,好看一点的工具条等等. Emacs的TTY版本与GUI版本看起来非常相似, 而VIM的TTY版本和GUI版本(gvim)就有很大的不同,这也是我几乎不用gvim的原因(个人习惯)

两者的思想理念不同
emacs是集大成者,整合的概念,w3m,irc,mp3,gdb,dired,ide,无论你在系统下要干什么,在一个emacs就可以搞定,集大成者意味这包容一切,从这点讲,emacs决不是一个编辑器那么简单,它甚至可以称的上一个系统,但集大成者也需要付出一点代价,代价就是过大的体形,当然所谓的体形巨大是为功能服务的,而不是“虚胖”。还有过多的命令(M-x后你不知道该用什么)和快捷键(C-),有人说emacs好多快捷键,记不住,不过,常用emacs的朋友一般都会习惯他们惯用的击键,其实,用啊用啊的就习惯了,就用不着记了,有可能刚开始的时候,需要你的一些记忆。
相比之下,vi/vim就是小巧而不失功能的编辑器,我记得vim的manual还是howto里说:vim不像emacs一样什么都干,而是配合其他程序,把自己的本分做好(大概是这么个意思,原话忘记了)。因为vi/vim专注于编辑,所以它的编辑效率是很高的。最近在公司写单片机汇编,感觉用vim比ultraedit效率高很多啊!

我两个编辑器都用过,虽然说都不是很精,但也算是用过一段时间的,我不是任何一方的fans
单纯的从编辑器上讲,vi/vim比emacs更加好;而在一些扩展功能(扩展功能并不是无关紧要的功能,比如ide,debug等等)下,emacs比vi/vim强大的多。

我写这些不是为了做一个和事老,让vim和emacs的fans如何如何,只是说出自己的一些想法,让一些刚进入linux/unix的朋友们弄清楚一些情况,unix like os下的编辑器。




以前,我多次试图从 vim 转变到 emacs 都失败了。原因很多,主要原因是 vim 的确一个很强大的 editor 不愧为 emacs 的主要竞争对手,vim 很多强大的功能,很难在 emacs 中找到相应的功能,那个时候还没有这个版,如果有的话,情况会好一些, 还有一个原因就是我周围几乎没有人用 emacs ,现在也是。

emacs 的入门比较 vim 要困难很多,我指的入门不是指简单的使用,而是高效的使用。vim 的很多操作几乎不需要配置就可以完成了,但是如果离开我那些复杂的 .emacs 文件,我认为 emacs 并不比 vim 好。有了我的 .emacs , emacs 绝对是最好的 platform (not only an editor) ,因为他是我的软件,一些我常用的功能,都是按照我的方式工作的,而且我可以随时实现我喜欢的功能,也许别人不喜欢这样的操作,但是我喜欢,我可以让 emacs 让我喜欢的方式操作。几乎没有其它软件可以做到这一点。

我转变到 emacs 是一个痛苦和偶然的过程。我曾经煞有介事的“学习” emacs , 写了很多笔记,现在看来,很傻,emacs 不是学出来的,是用出来的,很多功能不是用脑子记住的,而是用手记住的,我们不得不承认,有的时候肌肉的记忆能力,要比脑子的记忆能力强,而且快速,实用。很多体育运动员不就是用大量的训练提高肌肉对动作的记忆吗?

一次偶然的机会我发现了几个 vim 无法代替的几个功能,于是我开始真正喜欢 emacs 了。

首先是编写 TeX 文件的时候,很多数学符号可以快速的输入,可以方便的生成 dvi 文件,可以快速的输入 TeX 特有的特殊符号。

然后是 Python mode ,他是非常好的 Python 的 IDE ,可以很容易的编写 Python 程序,尤其是 Python 程序中用缩进来表示语法结构,在 Emacs 中很容易处理缩进。很容易把一段代码放入到Python 的解释器中执行,然后在解释器中交互的测试程序。参见 我的Python 学习笔记

一个编辑 C or C++ 的时候的一些功能,例如 auto insert 功能, hungry delete, M-SPC(M-x just-on-space) indent 功能 (TAB) ,在 emacs 中写出来的程序,是最漂亮的格式。最重要的是还可以选择自己喜欢的 c style 。 当然 vim 中也可以,但是默认的是用 tab 键格式化 ,这样的缺点就是不能保证程序在所有的编辑器中都是一样的效果,但是我以前也用 TAB 来 indent ,原因是我不愿意输入很多 space 。而且 vim 对重新 indent 一段代码的功能也不是很好,尽管 g= 等等键也可以工作,但是不如 emacs 中的好。

vim 中的很多编辑命令要比 emacs 快的多,只要输入很少的键。

但是, 我认为中 emacs 的理念是,有很多工作,做好不要让用户记住那些快键,按照用户的习惯,猜想用户(主人)的意思,默默的做好(讨好)用户就行了。

例如,在 C 中,我们习惯用 tab 键来 indent 程序。那么就用 tab 键来 完成 M-x indent-line 的功能。我们经常在输入分号之后,输入一个回车,那好,emacs 就根据上下文猜测应该回车的地方,自动回车。你想删除很多空格,那好,emacs 就会根据上下文,只留下一个空格(M-x just-on-line) 或者空行(M-x delete-blank-line) ,如果你在只有一个空行下还要 M-x delete-blank-line ,那么就把single blank line 也删掉。

还有的功能也很好用。

C-c C-c (M-x comment-region)
C-u C-c C-c uncomment-region

还有自动补齐右边括号,补齐引号的功能,还有补齐大花括号的功能。参见Emacs 中自动添加有半边括号的功能写C程序,输入左大花扩号自动补齐很多东西

还有 abbrivate 扩展的功能。

还有 fly spell 的功能。 emacs 知道主人是个粗心的人自动提示主人错了,但是 emacs 从来不把主人当傻瓜,不会自作聪明的改动,只有主人真的承认说,我错了 (按M-$)(注:我记不住具体的 M-x 命令了,可以用C-h k 查一个键的bind 的函数,记做 help key bind , 也可以用 C-h w 记做 help where, 查找一个函数的快键是什么 ) ,emacs 就提示很多可选的单词,供主人选择。 我记得有一个著名的把用户当作傻瓜的软件,总是把句子的行首单词 Capitalize,而且自动把他认为错了的单词改过来,每次我都要费尽心机想办法,怎么把这个功能关掉。

还有 auto fill 的功能, M-q 也总能干正确的事情。

还有 version control 的功能,emacs 几乎不用主人亲自备份文件了,他知道应该在合适的时候,备份文件。

还有 auto insert 的功能,他会自动根据环境,把当前的文件增加可执行权限,参见在保存文件的时候,会自动给脚本增加可执行权限

还可以自动增加

#!/bin/bash or #!/bin/perl #!/bin/python 。
参见Emacs 在创建文件的时候,自动添加 template 的内容

header.el的扩展还可以自动插入和更新 C 文件中的开头的一些信息,包括文件名称,创建日期,改动次数,纪录谁在什么时候为什么做了修改。还有公司信息,作者信息,版权信息等等。参见 轻轻松松为源 程序增加文件头信息

还有 emacs 有很多程序无缝结合 ,如 python, perl, octave(matlab), gdb, pydb 等等,emacs 是最好的 IDE 了。

总之,驯化了的 emacs 是你的忠实的奴仆,他会按照主人的方式工作,猜想主人的意图。

然而,有的时候 emacs 是奔放的野马,总是难以驾驭,要想emacs 按照主人的意志工作,那么主人就有义务详细的告诉他该如何工作。

有两种办法,一种是向其他主人学习,请教,按照他的办法驯化 emacs 。

另一种办法是掌握 emacs 的高级用法,只有了解他的语言, Elisp (Emacs Lisp) ,明白了 emacs 的语言,才能够和 emacs 很好的交流,沟通, emacs 是一个很听话的孩子。

如果要融入 emacs 的文化,或者叫理念,甚至叫宗教, 那么就要 Hack 他的程序,了解他的五脏六腑,做一个 hacker。(注: hacker is NOT cracker ) 除了安装emacs-x-xx.rpm 还要安装 emacs-el.x-xx.rpm , 然后用 M-x find-function 看任何一个函数是如何实现的。

浏览了一会儿,你会感到什么是自由软件,什么是真正的自由。只要你愿意,你可以探索任何一个功能是怎么实现的。

使用其他的软件的时候,我总是在想办法发现软件提供给我什么功能,我怎样按照软件定义好的方式工作,我怎么去适应软件。

如果运气不好,碰到一个自以为是的软件,我会觉得被软件的作者愚弄。

如果运气再差一点,我会觉得被软件的作者侮辱,因为他把我当成傻瓜。

当然,也有运气好的时候,例如 vim ,他的编辑方式是最快的方式。

但是 emacs 不同,使用 emacs 的时候,我会想我喜欢用什么样的方式完成某个功能,大多数的情况,都可以简单的用 global-set-key, or local-set-key 解决掉。如果功能很复杂,就查找一下是不是有人实现过了, emacs 的社区中有很多好心人, www.emacswiki.org 是一个好地方。如果没有人实现,那么就自己写一个,然后贴到网上去。

开放,自由,这就是 emacs 。

emacs 总是想办法如何适用用户的方式,当然,缺点就是,初看上去 , emacs 不是很友好, 用户需要学习如何配置emacs 。

现在我很喜欢摆弄 emacs , 我知道,只要我想得到,emacs 一般是可以做得到, 当然我想的要合理,我想买彩票中500万,emacs 肯定做不到 ,而且还不能和其他你需要的功能冲突。

有一项功能我一直没有想办法办到,就是类似 source in sight 的自动搜索一个函数的 caller ,自动成员变量补全,class browser 等等。这个功能很难,因为他要包含语言的语法语义分析。 C++ 中的 template , typedef , #define #if , inline function, inner class (or structure, enum) , name space 等等的语言特性,增加了其难度。

尽管 semantic 号称可以,但是和 source in sight 还有差距。我用了几次,不好用, ECB 也是不伦不类。

我认为 semantic 的目标太大了,他要容纳所有语言的语法语义模糊分析的功能,这个很难,尽管他的作者是大名鼎鼎的 eric 。

我还是很喜欢 semantic ,因为我相信他行,于是我试图 hack semantic ,实现那些功能,尽管自动补全成员变量的功能,勉强可以了,但是其他复杂的功能,还是很难实现。semantic 太复杂了。

但是一有时间,我还是喜欢看上 semantic 几眼。

我这篇文章是用 notepad 编辑的,于是顺便列举一些 emacs 和 notepad 类似的功能,参见类似Notepad 基本操作快速入门


原文出自:http://ann77.stu.cdut.edu.cn/EmacsFromViToEmacs.html



Emacs强在哪里及如何学习Emacs

宣传一下我自己的blog,原文带格式看起来更方便些:
http://www.cublog.cn/u/13684/?u=http://www.cublog.cn/u/13684/showart.php?id=73297

Emacs强在哪里及如何学习Emacs
方伦钢

下文中Emacs均指GNU Emacs,XEmacs与GNU Emacs相似。
转眼用Emacs已经有两年,越来越心悦诚服于它的强大功能。常常是我脑子里闪出个念头“如果Emacs有这个功能就好了”,结果一查手册,嘿,Emacs还真的就已经预备好了。
想到刚开始时自己的将信将疑;我相信很多朋友看着不起眼的Emacs界面肯定也想象不出Emacs究竟有什么好,更别提改用Emacs了。本着“好东西要大家分享”的精神,我就结合自己这两年来的心得简单介绍一下我认为很强、很实用的Emacs的功能并就如何学习Emacs发表一下自己的想法。希望能对想了解的Emacs的朋友有所帮助。如果能因此拉几个人入伙更好。由于篇幅的限制,Emacs的抓图就不奉上了,也许有空的话我可以上传几张到blog(http://jixunuli.cublog.cn)上。
Emacs的优点
1.        首先,Emacs是“跨平台”的。大部分操作系统(UNIX、windows)都有相应的Emacs。所以不用担心换了开发平台后又要重新学习一种新的编辑器。而且许多操作系统默认就安装了Emacs。
2.        Emacs的文本编辑功能十分强大,特别是对编程的支持,感觉十分贴心。毕竟Emacs是程序员开发的,程序员最清楚哪些功能能帮助程序员编程。
3.        Emacs高度可定制。这给我们充分的自由。当然如果不愿(或暂时不会)定制,完全可以用默认的配置。
4.        Emacs高度可扩展,而且各种扩展的风格统一。据说Emacs的设计使得它十分易于扩展。设计上的问题我不清楚,但是从用户的角度来看,Emacs安装插件确实很方便而且插件也确实很多。尤其是对与程序开发工具的集成(如gcc,cscope等)提供了极大的方便。经过配置,Emacs简直就是一个IDE。
5.        Emacs提供图形的交互界面,但同时又彻底支持命令行模式,用户仅用键盘就可以实现所有的操作。键盘比鼠标方便?很多时候是这样的,要不然为什么快捷键叫“快捷”键。
Emacs的功能
本节,我将简单介绍一下我在日常使用中感觉比较方便的、Emacs21.3安装包自带功能和插件:
·        强大的文本编辑功能:
o        对许多编程语言(如c/c++/java/sql/shell等等)的支持:语法高亮、代码缩进、多种形式的代码折叠、块操作等等;还可以通过安装插件支持新出现的语言。安装插件color-theme后可以方便的改变语法高亮的颜色。
o        代码补全(hippe expand)与IDE常见的代码提示不太一样。二者各有千秋,如果能兼具两者最好了(eclipse就两种功能都具备)。
o        自动代码插入。主要三种形式:一是abbrev:输入缩写自动替换成完整形式;如输入“cc”自动替换成“const_cast”。二是skeleton:输入命令后,自动在选中的代码周围加上预制的代码;例如我选中一段代码然后输入命令“trycatch”,选中的代码就会被包裹在try/catch块中。Skeleton还可以定义成abbrev。三是auto insert:创建文件时根据模板自动生成代码,例如版权声明。
·        EDIFF
Ediff是Emacs集成的比较与合并(merge)文本文件内容的工具。有了它,你可以方便地比较两个(或三个)不同文件、文件夹。较其它比较工具而言,它的特点是它与编辑器(即Emacs本身)集成在一起,所以在比较的过程可以方便的编辑被比较的文件。例如语法高亮仍然有效。
它还提供了对版本控制工具的支持,例如用ediff-revision命令可以方便的比较不同版本之间的区别。
·        CVS与VSS
Ediff的一个重要用处就是为版本控制提供帮助。Emacs自带了CVS等传统版本控制工具的接口,使用这些接口可以非常方便地调用CVS等。比直接在命令行使用CVS方便多了。
如果使用微软的VSS,安装一个名叫“source-safe”的插件就行了。
·        Dired
在命令行模式下,删除、拷贝、重命名等文件操作有时是件挺麻烦的事情。常常需要键入了一长串的路径和文件名;在命令执行后才发现命令写错了。如果还和我一样总记不住路径的话就更麻烦了。
在Dired模式你可以方便的进行单个或批量文件操作:新建、删除、查看、复制、重命名、查找(包含某字符串、正则式的文件)等。
·        Eshell
Eshell是用Emacs的专用语言elisp实现的shell。启动后它内嵌在Emacs中。因为这个特点,它可以充分利用Emacs的资源,好处真是妙不可言呀,只能说“谁用谁知道”。
·        Cscope
Emacs还有cscope的接口。利用该接口,你可以在编码的过程中随时使用cscope查找函数、变量等等。同样,比直接在命令行使用cscope
·        GCC、GDB、CC、DBX
Emacs内置以上四种编译器、调试器的接口,呈献给用户一个可视化的编译、调试环境。无论是编译还是调试时都可以方便的定位到想看的源码上。
·        Speedbar
Emacs内置的工具,类似于IDE中常见的浏览窗口。也是ECB的基础之一。
·        Color-theme
前面已经提到过了。Emacs是高度可配置的,所以你可以定制语法高亮的颜色搭配。但是我这样缺乏美术细胞的人是不可能配出好看的语法高亮来的。幸好有热心人写了插件color-theme。它提供了很多配色方案,肯定有一款合你的意。我选的是gnome2。
·        Tabbar
有了tabbar,Emacs会将所有打开的文件以tab页的形式显示出来(就像ultra-edit那样)。
·        ECB
全称是Emacs code browser,安装之前要先安装cedet。我认为它是speedbar的升级品,看上去很花。但老实说,我觉得熟悉Emacs后,它的用处不大。刚开始用Emacs时有它可能会觉得方便些。
·        Ange-FTP、emacsclient、gnuclient
Ange-ftp让你能够方便的编辑远程ftp服务器上的文件(和Ultra editor的功能一样)。
Emacsclient和gnuclient使得Emacs成为一个文本编辑的server,可以方便快速地将编辑文本的工作转到Emacs上。本人表达能力有限,没用过Emacs的人可能不知这句话所云,否则就知道这是一个很好的功能。
·        WOMAN
Emacs集成的看man page的工具,比MAN(unix自带的工具)要方便。WOMAN(对应于MAN)这个名字体现了大牛们的幽默,全称是With Out Man。
·        VisEmacs
用惯了Emacs后,也许就会和我一样无法忍受VC的代码编辑器了。不得不用VC开发windows的程序时,VisEmacs可以减轻我们的痛苦。给VC装上这个插件后,编辑界面没有任何不同,但是编辑代码时就会自动转到Emacs。
如何学习
以上说了这么多,也许你会关心要花多大代价才能全部掌握。确实,要体验Emacs的强大需要花些时间,但是绝对不需要花很多时间。当然啦,如果你愿意,你可以持续的投入时间,从Emacs持续的得到回报。曾经,我一度把看Emacs手册作为放松,因为每次看都能学到一些让我happy的新技巧。

Emacs入门只需要也*必须*要学习Emacs的一些基本概念。这大约需要一个小时左右。Emacs自带的手册使用很方便,也写得很好(再次向Emacs及其手册的作者们致敬)。启动Emacs后可以用鼠标从菜单栏打开手册。搞清楚buffer、mode、kill ring、undo ring、region、ctrl键、meta键等概念就算会用Emacs了。如果你是Viper(习惯使用vi的人),你也许会需要一些时间来适应。需要提醒的是:Emacs启动相对较慢而且设计Emacs时设想的应用就是同时编辑多个文件。所以一般只需也应该只启动一个Emacs进程才能充分利用Emacs的好处。我现在的工作场景是:每天早上一上班就远程登录到Solaris服务器上,然后启动Emacs;接下来所有的工作都通过Emacs完成,登录shell的作用几乎只是用来启动Emacs;下班时,退出Emacs关机走人。

会用Emacs之后就可以开始用它进行工作了,遇到需要什么功能的时候再现学什么功能。前面提到的那些功能都很容易掌握,一般花几分钟看看手册就行。别忘了,各种扩展的风格是统一的,所以有时不看手册,想当然的去操作也没错。倒是各种各样的小技巧多多益善,积累起来需要一些时间。但那只是锦上添花,不用急着学会。如果使用过程中遇到一些小问题,可以上网查。网友们的热心程度是毫无疑问的。

一个合适的配置文件能让Emacs更加贴心。找一个现成的配置文件,然后根据需要修改成自己的配置是不错的办法。我的配置文件可以在我的blog上找到(http://www.cublog.cn/u/13684/?u=http://www.cublog.cn/u/13684/showart.php?id=72609)。

资源
www.gnu.org
GNU的老巢,也是Emacs的官方网站。
www.emacswiki.org
大量的Emacs资源。很多牛人也在上面,或许回答你问题的就是Emacs的开发者呢。
www.linuxfrum.net
中国linux论坛。里面有个专门的Emacs版。Emacs使用中遇到问题可以到这来查、来问。


场景:一个同事在调Perl程序,通过注释程序的不同部分来定位问题所在。

问题:C/C++提供了/* */,用来注释大段代码,但是对于只有行注释的Shell脚本,Perl程序或者Emacs Lisp程序来说,这种调试方式似乎麻烦的很,特别是当行数较多的时候。

解决方案:Emacs,更准确的说——是各种语言的Mode,为用户提供了两条命令,快速注释和反注释选中的代码,他们是M-x comment-region和M-x uncomment-region。比如注释掉一个函数的操作序列通常是:

  1. C-M-h选中当前(即光标所在的)函数;
  2. M-x comment-region(在CC Mode里可以使用快捷键C-c C-c)注释掉整个函数。

你看,方便快捷,何乐而不为呢!如今Ruby越来越火,很多人提到的一个优点就是,它让程序员将精力完全集中在逻辑上,而不是实现的细节上。Ruby通过提供更高层的抽象实现了这一点。Emacs秉承同样的理念,程序员应该把更多的时间用在实现新功能或修改缺陷上,像在每行前面插入或删除井号(#,Perl、Shell等的行注释符)或分号(;,Emacs Lisp的行注释符)这样的活,还是交给程序来做吧。基于这样的理念,Emacs为用户提供了丰富的编辑操作。

在进行更多介绍之前,我们先解释上面例子中一些特殊符号的含义。C代表Control键,M代表Meta键(对于Windows键盘来说是Alt键),S代表Shift键;M-x的含义是先按住Meta键不放,再按x键,C-M-h的意思是同时按住Control键和Meta键不放,再按h键。使用Emacs时按Control键的机会非常多,但是对于中国人来说,Control键的位置似乎远了点,用小指按起来很累,我从同事那里学了一招——用手掌外侧去“压”Control键,这样,本来费力去按Control键的动作就转化成手轻轻向外侧翻的动作。如果你稍微留意的话,就会发现一个非常普遍的输入动作,左手按C-c或C-x复制或剪切文本,右手握鼠标,定位光标后,左手再按C-v做粘贴。这是非常糟糕的编辑动作,是一个有追求的键盘手必须避免的。因为几乎每个人在按C-c或C-x或C-v时都要看一眼键盘,在把手从鼠标移回“j”键也要看键盘,结果,整个操作下来至少要看两次键盘,Cache狂miss啊,同胞们!更何况,在我们选择用手外侧这么优雅的动作去压Control键之后,就更不可能用一只手同时按C-c或C-x了,在Emacs里,虽然它们不再代表复制和剪切,但同时按这两个键的机会还是很多的。因此,好习惯是右手按Control左手按c或x,即使是对于M-x这种无伤大雅的击键,最好也养成右手按Meta左手按x的习惯。

Emacs的快捷键多如牛毛,对于熟练工来讲,它极大地提升了编辑效率,但对于初学者来说,则很难一下子记住那么多,没关系,我们一点一点来,先学习一些Emacs的基本概念

Point和Mark
Emacs里有两个特殊的位置。光标所在位置称为point,它可以通过Emacs Lisp函数(point)获得。有一点需要注意的,这个位置的概念与字符的位置概念是不一样,这里的位置指的是两个字符之间的位置,所以,所谓的光标位置,实际指的是光标前一个字符与当前字符之间的位置。理解了这里面的区别,就很清楚使用C-t交换两个字符位置时应该把光标放在哪里。比如我经常把label写成lable,这时,只要将光标停在le之间,然后按C-t就可以纠正拼写了。Mark是一个特殊的位置,Emacs通常为用户保存了一系列重要的位置,其中最新的一个称为当前Mark所在的位置,我们可以通过C-u C-Space将光标定位到当前Mark所在位置,还可以连续使用该快捷键回到前面任何一个保存的Mark位置。当然,这样的Mark通常是由一些命令自动设置的,比如粘贴(C-y)之后,光标通常定位在新文本的末尾,当我们想把光标移到原来的位置(即新文本的开头),就可以利用Mark,因为粘贴命令在操作前已经保存了一个Mark。用户也可以显示地申请一个Mark(C-Space),通常是为了选中某个区域(region)。
region
region就是选中的区域。选中一段文本的方式很简单,在你想选择的文本一端申请一个Mark,然后将光标移到另一端,这时Mark与Point之间的文本就称为选中的region。通常来讲,我们只能移动光标所在位置,所以当我们发现Mark错了位置时,只能放弃当前的选择,重新来过。Emacs知道用户经常会改变主意,所以提供了C-x C-x交换Point与Mark的位置,这样,我们就可以双向调整选中的区域。当我发现Emacs的这个功能时,就对自己说,这辈子就是它了,可见爱是多么冲动:-)。如果当前文本里存在一个选中的region,那么很多操作的行为会因此而发生改变,比如字符串替换。通常,它会替换从当前光标所在位置到文本末尾之间所有出现的字符串,但是当存在一个选中区域时,替换操作只发生在这个区域里。想想这有多方便吧,比如我想把一个函数里所有的变量i改名为index,那么只需用C-M-h选中这个函数,然后M-x replace-string。因为选中区域的操作非常频繁,所以我把调出输入法(无论是在Windows还是Linux上)的快捷键改为C-S-F9。

好,我们现在可以学习一些Emacs为我们提供的便利工具了。很多编辑器都提供了整词查找和替换功能,是不是常方便?而Emacs不仅提供了更多的基于词的操作,还提供了基于句子,甚至基于函数的操作。各种各样的括号恐怕是最让程序员头疼的了,幸好很多编辑器都提供了括号匹配功能,而Emacs的括号匹配、光标移动以及region结合在一起,有意想不到的功效。让我们看看下面的一些例子吧。

Emacs里面的词指的是以空格或标点符号格开的字符和数字组成的序列。我们可以使用M-f向前(或M-b向后)将光标移动到相邻单词的边界,使用M-@将Mark设在下一个单词的边界处,而保持光标位置不变,M-d删除下一个单词,M-Backspace向后(backward)删除一个单词(不用再狂按Backspace了)。另外,当编写程序时,我们还可以使用C-M-a将光标定位到当前函数头,C-M-e到函数尾,用C-M-f选中当前函数。而C-M-n和C-M-p则可以将光标定位在两个匹配的括号上。另外,Emacs也提供了相应的快捷键取代Home、End、PageUp和PageDown,使得我们可以彻底抛弃这些键,以及方向键和鼠标。综合使用Emacs提供的丰富的光标移动操作,我们定位光标的速度将远远大于过去那种鼠标加方向键的模式。这些操作不仅可以用来移动光标,还可以用来选中区域。比如选择一对大括号包围的所有语句,只需在左大括号前申请一个Mark,然后用C-M-n将光标移动到对应的右大括号之后,这样,整个选择操作就完成了。

怎么样?有点动心了没有?




  评论这张
 
阅读(310)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017