关闭

关闭

封号提示

内容

首页 emacs_使用手册.pdf

emacs_使用手册.pdf

emacs_使用手册.pdf

上传者: 秋末 2012-04-02 评分 0 0 0 0 0 0 暂无简介 简介 举报

简介:本文档为《emacs_使用手册pdf》,可适用于IT/计算机领域,主题内容包含Emacs使用手册Emacs启动:直接打emacs,如果有Xwindows就会开视窗如果不想用X的版本,就用emacsnw(Nowindows)起动符等。

Emacs使用手册Emacs启动:直接打emacs,如果有Xwindows就会开视窗如果不想用X的版本,就用emacsnw(Nowindows)起动符号说明CX表示按住CTRL键,然後按X,再把CTRL,X一起放开MXMETAMETA在没有META键的电脑上,MX等於先按ESC键,接著按X键Sun上面META键就是菱形的那个键有些系统META键就是ALT键(或者某一边的ALT键)CX或MX的X没有大小写分别Emacs按键命令基本上是一串C<chr>和M<chr>组成的超过两个以上的按键命令,Emacs会在萤幕最下面一行显示你按过什麽这一行叫作minibuffer结束Emacs按CxCc取消执行Cg有些Emacs命令会跑很久,可以用Cg中断之按错键也可以按Cg取消上下移动Cp向上(previousline)Cn向下(nextline)左右移动Cf向右(forward)Cb向左(backward)其实Emacs内部没有行的概念,把一篇文章放在一个大buffer里面,所以Cf(forward)就是向档尾移动,Cb(backward)是移回去的意思,一次一个字翻页下一页Cv(viewnextscreen)上一页Mv翻页时,上一页末尾会留一点在萤幕最上面,以维持连续性Emacs在游标接近萤幕最下方时会自动跳半页,把档案往前挪一点,方便阅读重画萤幕CLEmacs里面游标的专有名词叫pointpoint==游标目前的点游标一次跳一个字(word)Mf往後跳Mb注意Cf与Mf,Cb与Mb的对称性移到行头Ca行尾Ce移到句首Ma到句尾Me(Ma到上一个句点後面,一个句子的起头Me到句点後面)移到档头M<档尾M>删除游标目前指的後面的字Cd前面的字DEL(Delete键)DEL的正名叫Rubout(Rubout)MDEL往回删一个字(word)Md往前删(游标後面)Ck删至行尾(kill)Mk删到一句子结尾(删到句点)(kill)注意Backspace=Ch在Emacs下是help的意思後面有(kill)的,表示此删除的动作是kill,不太等於deleteemacs会把kill掉的东西放到killring去,算是一种暂存的地方,以後可以叫出来见yank说明Undo:CxuC等於Cxu有些DEC终端机,C就是C有时等於CShift重复执行举例,向右移个字,CuCfCu在Emacs里是蛮特别的,用来设定一些引数(argumentrepeatcount)给其後的命令CuCn向下移行有一个特别的例外,CuCv不是翻三页,而是整个萤幕向上移三行据说这比较有意义CuCxuUNDO次给CL一个引数会怎麽样:CuCl会重画萤幕,并且把目前的行移到萤幕第一行另外,Cu等於MCu数字等於M数字Xwindows下,CleftCright一次移一个字(word)CupCdown移动一段(paragraphsC语言的话是block)Home=CaEnd=CeCHome=M<Cend=M>PgUpPgDn=MvCv设定重覆次数更加简单,比如要向右移个字CCrightarrow就是按住CTRL,然後打就对了,比Cu简单Mouse中键用来选取有hilight的地方右键是menubutton如果不小心按两次ESC,等於MESC,会有一个讯息跑出来说你按到一个被disable的命令这是高级指令,作者认为初学者用不道,所以会问你要不要启动它,一般回答no如果某一行太长,萤幕显示不下,Emacs会在萤幕最右边打个$,表示此行未完,右边还有把一行拆成两行:在想拆处按Enter即可合并两行为一行:在行尾按Cd(或行首按DEL)Yank:吐出被删掉的(killed)东西只要用kill(Ck,Mk等)删除,超过一个字的资料,emacs就会把它存起来,然後Cy可以把它叫出来功能跟CutPaste一样Kill和delete不一样,只有被kill掉的东西才能用yank吐回来游标在同一地方不动,连续kill掉的资料会被当成一次kill掉的,yank时会一起回来被Kill掉的资料是放在称作killring的资料结构上面,ring就是个圆圈,被kill掉的东西会依序摆在圆圈上yank会放回最近一次kill掉的资料如果不是你想要的话,用My可以换(My就是告诉emacs,不对不对,我不是要这一个,换前一个给我)My要紧接在Cy之後拷贝文字的方法==连续Ck几次,把要拷贝的行全部删掉,然後按Cy弄回来再到想复制的地方按一次Cy,就成了把要拷贝的资料kill掉在yank回来好像很笨是有比较文明的方法,那就是Mw,不过较麻烦首先,要先设标记Mark用CSPC或C设然候把游标移到另一端,按Mw就可以把mark到point间的字存到killring上point就是游标的意思Emacs不会把Mark起来的地方用highlight表示,除非在X下在X下,可以用Mw来拷贝用滑鼠反白的文字killyank就是cutpaste的意思以上大部份指令对Bash的命令列编辑也有效档案操作读档:Emacs术语叫findingafileCxCf然後在minibuffer输入档名输入档名时,SPC键有autocomplete的功能,或者会秀出到目前为止档名前几个字和输入一样的(TAB键也有类似功能)CxCf叫findfileCxCs存档(savecurrentfile,savecurrentbuffer)Cxs存所有的档Cxi插入档案把另外的档案的内容读入目前编辑区内视窗Emacs把档案读进来,存在buffer中我们透过window来看编辑buffer两个视窗会把萤幕切成两部份,他们可以同时显示相同的,或不同的档案对初学者而言,最需要的是记住怎样让不想要的视窗消失:Cx关掉目前的视窗Cx会让目前的视窗占满整个萤幕(OneWindow),取消关掉其他的视窗Emacs里面有许多功能都会开一个小视窗来和使用者沟通,显示讯息有时候不会自动消失很讨厌,Cx就很有用另一个功能是如何跳到另一个视窗Cxo(otherwindow)Cx把目前的视窗切成两个(水平分割)Cx(垂直分割)Cx是一串与视窗有关的指令Cx是一串与视窗有关的指令Cx则是扩展到X的视窗,称为frameCx就是再开另一个X视窗(frame)多档编辑CxCb看目前有那些buffer(buffer就是emacs放开起的档案的地方)Cxb然後在minibuffer输入buffer的名字,可以切换编辑bufferTAB键也有作用有些内部的buffer(就是没有档案的buffer),是用*开头和结束,这个也要打,如*scratch*最候提醒:Cx可以把多馀的视窗关掉Emacs扩充指令前面介绍的emacs按键大部份都是C<chr>或者M<chr>的形式这是最简单的按法,由一对按键构成一个指令Emacs的按键可以超过个以上如Cx或CxCb一般超过一个按键组合的命令都是用Cx开头另外你也可以直接下命令按Mx之後就可以打一个Emacs命令来执行一般这些命令名字都很长,不过都不常用等一下我们会介绍一些还有介绍怎麽把这些命令设成按键指令CxCc就是结束Emacs不过一般Emacs很笨重,一旦起动就不轻易退出所以比较常用的是CzCz把Emacs暂停,回到命令列当你下次再需要编辑时,打fgemacs就可以把Emacs唤醒在X下,Cz会把emacs缩成iconmodelineemacs编辑画面由编辑区(buffer)状态列(modeline)和对话区(minibuffer)构成这里解释modeline显示的讯息以下是个范例:**XEmacs:xemacsqs(Fundamental)由後面往前解释,表示游标的位置(Fundamental)表示编辑模式这是最原始的模式编辑不同种类的文章可能希望用不同的模式,比如说Cmode,lispmode,texmode,textmode等等在不同模式下可能多一些按键出来举例textmodeMxtextmode可以切入textmode,这是一般人编辑文字使用的模式和Fundamentalmode没什麽差异不过游标移动时,Emacs对一个字的定义就有所不同,因而MfMb等移动一个字,一个段落的指令就可能会停在标点符号的前面此时状态列变为(Text)以上说的是Majormode另外还有minormode,其实就是一些额外的功能比如说,Mxautofillmode则状态列显示(TextFill)autofill就是自动断行,让文章每行固定有个字MXfundamentalmode可以变回来这里要说明一下,emacs在minibuffer下有autocompletion的功能,也就是打Mxfund然後按SPC,它会自动补全fundamentalmode,不用全打如果有两个以上的选择,它会告诉你这个功能对findfile(CxCf)等等档案编辑功能也有效前面提过最後解释两个**号右边的*表示文章被修改过了左边的*表示这个编辑区(buffer)可以修改有一些emacs的buffer是readonlybuffer,就会标成表示档案是readonlyCxCq可以解开readonly的锁定,无论如何你要改这个编辑区这是个toggle指令,如果原来是可以修改的,CxCq会把它切成readonlySearch没有Search功能的编辑器简直就是小朋友的玩具Search是一项很重要的功能,所以emacs也提供的很完善CsCrMxresearchforwardMxresearchbackwardMxsearchforwardMxsearchbackward以上这些指令是基本的search指令Cs,Cr是increamentalsearch,就是你打字的同时,emacs就直接帮你找一个是forward,一个是backward找到了怎麽办按Cg可以取消搜寻,跳回原来的位置按Enter就让游标停在找到的地方此时minibuffer显示:Marksavedwheresearchstarted什麽意思就是isearch帮你在原来的位置设了一个mark,然後把point(cursor)移到新的位置想跳回去原先的地方CxCx就可以了(exchangepointandmark)CuCSPC可以依序跳回前几次设mark的地方(CSPC是设mark,给它一个argument,就是反动作)(还记不记得Cu可以给後面的指令设一些参数有些指令拿这个参数来当作repeatcount,有些指令就只拿来当作onoff,truefalse,setclear而已)Mxresearchforward可以让你用regularexpression搜寻Mxsearchforward则没有increamental的功能另外一个指令,作用和grep很像:Mxoccure和search相提并论的就是replaceMxreplace然後按SPC,就知道了Emacs的设定:Emacs的设定档是$HOMEemacs你应该多少知道,emacs是用lisp写成的编辑器,emacs档也都是要用lisp的语法设定emacs用的lisp称为elisp,和一般的lisp差一点点有一个infopage,emacslispintro,深入浅出的介绍emacslisp如果你还不会,不懂programming,强烈建议你看这份文件如果你会texinfo,你可以把它很漂亮的印出来(内容一点点而已,两三天就看完了)如果你把emacs搞砸了,进emacs很奇怪,怎麽办用vi改emacs:>emacsq进emacsMajorModes一般常见的emacsmajormode有fundamentalmodetextmodelispmode有自动对括号重排,直接执行lispcode功能cmodeccmodecmode是比较旧的cmode,ccmode应该是目前新的cmode有自动重排对括号的功能也可以在emacs内compile,跳到compilererror修正错误执行程式时debug(配合dbxgdb)compile是透过Makefile进行texmodeTexLatex编辑模示可能是打一些奇怪的标点符号比较方便<programminglanguage>mode同lispccmode如果是interpreter的话,emacs通常都可以直接执行debug<programminglanguage>mode还有tags的功能,後述htmlmode,texinfomode,sgmlmode:编写html,texi,sgml之用wmodeWWWbrowser在xwin上不满意,但可以接受TagsTags是一个显为人知的功能所以我想提一下这不是emacs发明的,而是vi原本的特异功能emacs只是发扬光大而已假设你有一个目录,里面是一个程式的原始码,比如说,tin的原始码,放在~tinbeta下面你想看它们首先,叫emacscd到该目录:Mxcd然後,建立tagtabletagtable就是一张对照表,记录哪个符号(variablefunctioncall)对映到哪个档案的哪个地方有这张表,emacs可以让我们快速的在程式码内游走一般这张表是一个档案,叫作TAGS(大写)M!etags*chM!是执行externalshellcommand的意思etags就是emacs的建表程式你只要告诉它你的sourcecode在那即可vi的话是使用ctags这个程式,它建出来的档名叫tags(小写)因为我们介绍emacs,所以不管它然後,怎麽看程式你知道所有的C程式都是由main()开始,所以你想找到main()在哪个档案这时只要按M然後emacs会问你tagtable在哪里因为我们已经cd到该目录,直接按enter就好了然後输入main,emacs就会把你带到main(){}去如果你看到某个程式片断呼叫一个你没看过的函式,你可以把游标移到该函式的名字上,MENTER就搞定了如果emacs找错了(比如有变数和函式同名,emacs跳到变数去),那你可以用CuM找下一个在编辑程式码的时候,MSPC很有用,它会把游标附近的空白缩成一个在其它地方也有效Emacs的一些package:Mxdired(或Cxd)游走编辑目录,就是档案总管的意思:)Mxman就是manpageMxshell开个commandprompt,不过不能跑vi,elm,tinMxgnus读新闻读信Mxrmail读信MxvmviewmailMxmhrmail读信(packagemhe)Mxmhsmail送信(packagemhe)强列建议改用emacs读newsbbs世界会更美好!读信的话就要看你的感觉这些读信程式都会把信从系统的mailfolder搬到自己的目录下,占用quota,我不喜欢:p建议elm或mutt除非参加maillinglist配合procmail不然不实用用mhe须要装mh这个外部程式,不太好建议vm或gnus写完信,CcCc就可以送信如果你的资料用rcssccs作版本管理,emacs自动会起动versioncontrol(minormode),cxcq变成checkincheckout如何取得更多的资讯:Emacs的lisp经过多年的发展,已成为完整的selfdocumenting系统很多东西都可以线上找到你要的资讯前面说过,或者你已经不小心按backspace遇到了,Ch(就是backspace的ascii码)在emacs里面是help的意思,它可以带出一串指令常用的有:ChFEmacsFAQChtEmacs使用教学ChnEmacsNEWSfile,介绍最近改版的新功能ChiInfosystemInfo是gnu用来取代manpage的系统,基本上和文字模示的WWW差不多有许多重要的资讯可以在这边找到如果你是新手,建议你在xwin下看不然,按键m(menuitem),SPCnextpagel(lastnode:node就是章节的意思)u(upnode)d(directory,索引)BS(Backspace,backapage)如果全部只按SPC,就跟man一样Chkdescribekey,告诉你按这个键执行那个lispfunctionChfdescribefunction告诉你function在作什麽如果只按SPC,emacs会给你所有lisp函数的列表,和说明Chvdescribevariable同functionChaapropos的意思(approximate)给lispfunction的部份字串,emacs帮你找Chb列出目前所有的keybindingChmmodehelp列出目前的mode的特殊说明CcCh列出以Cc开头的所有keybinding虽然说Emacs可以定义按键,可是Ctrl开头的所有组合大概都用光了,只有Cc算是可以自定指令不过有些mode也侵犯这个空间目前的convention是Cc<chr>留给user,CcC<chr>留给package有以上这些help,你的emacselisp功力会随著时间成长Elisp简介:Emacs有三份手册第一份是使用手册,第二份是Elisp手册,第三份是Elisp简介第三份的程度是入门级,值得看Elisp手册其实也写的很简单,还教你lisp,不过有点长,适合参考因为我lisp没有仔细学过,所以:以下所言,如有巧合,那才是真的Basicdatatype字串(string)"Hello,World"字元(char)a问号开头atomlist:()是一个list,由个atom组成pair:中间是句点(apple)alist(associatedlist)就是一堆pair的集合,就像perltcl的associativearray或者说是一个资料库,一堆(key,value)pair'((Apple)(Orange)(PineApple))vector()emacs用vector来表示按键(keystroksequence)fffanil就是空的list,或者表示falsettrueForms我们写程式最好有样版让我们填空最简单了Form就是样版,不过意义不太一样Form就是Elisp可以接受的句型lisp解译器预设是对list的每个元素求值(evaluate),除非是specialform,有特殊的定义比如说(defunFUNC(ARGLIST)BODY)就是一个specialform,用来定义函式,所以FUNC不会被求值,被当成symbol,(quote(LIST))这也是个specialform,叫lisp把(LIST)当做symbol就好了,不要evaluatequote很常用,所以有个缩写:'(LIST)等於(quote(LIST))'Asymbol可以表示一个Atom,名称叫Asymbolset可以产生定义新的变数(set'hello)hello=注意我们用'hello,所以lisp不会evaluatehello的值这家伙很常用,也有简写(setqhello)setq就是setquote的缩写这是个specialform,不会对第二个元素求值valuation在Emacs下,CxCe可以执行(evaluate,求值)游标左边的叙述结果会出现在minibufferlispinteractionmode中Cj可以evaluate,并且把结果append到bufferlisp程式由一堆list构成称为expression每个expression都回传回一个值有些expression有副作用,如删掉一个字(这跟C的intdeletechar()意思一样,它传回int,并且删掉某个char)定义函式:(defunNAME(ARGSLIST)"注解"optional(interactive)optionalBODY)定义一个叫NAME的函式BODY是一堆expression注解是用来给Chf显示的(interactive)表示这个函示会和userbuffer作用(interactive"B")表示执行此函式先问user一个buffer的名字,然後当作参数传给它(如,当user透过keybinding或者Mx呼叫此函式时)(interactive"BAppendtobuffer:nr")问userbuffername时,提示号Appendtobuffer:此function有两个引数,第一个是B,就是buffer第二个是r,region用n隔开(interactive"p")用Cu设的prefix把它当作参数传给我预设值==CuCf向右移四个字一些lisp函式:(list)产生'()(car'()(cdr'()'()(cons'())'()(cons)()(cons(cons(consnil)))等於'(){list是用pair串起来的,用C表示:pair:{Object*first,Object*second}*(pairifirst)==ipairisecond==pairi}(cons'()'())'(())(setqa)(a)a(a)a(*)(currentbuffer)传回目前buffer的资料物件(switchtobuffer(otherbuffer))(setbuffer)(buffersize)(setqcurrentpos(point))(pointmin)(pointmax)(message"Hello")在minibuffer显示Hello(if(test)(thenpart)(elsepart))(cond((test)BODY)((test)BODY)(tOTHERWISE)(let((varvalue)localvariablevarnovalue(varvalue))BODY)(lambda(ARGLIST))同defun,但是没有名字(anonymous)可以存到变数去:(setqhello(lambda()(message"Hello,World")))(funcallhello)(gotochar(pointmax))(defvarVARVALUE"*注解")如果VAR不存在才定义有注解可以用Chv看注解打*号表是使用者可以直接改这个变数本来就是给使用者设定用的可以用Mxeditoptions来线上设定(emacs结束就没有了,不过editoptions可以给你所有可修改的变数的列表,你可以放到emacs档内(directoryfiles""t"*")returnalistoffilesunderdirectoryX(load"xxxxel")同#include<stdioh>给使用者设定用的可以用Mxeditoptions来线上设定(emacs结束就没有了,不过editoptions可以给你所有可修改的变数的列表,你可以放到emacs档内(directoryfiles""t"*")returnalistoffilesunderdirectoryX(load"xxxxel")同#include<stdioh>(setqloadpath(cons"~emacs"loadpath))load的searchpath(autoload)不像load会直接evaluate整个档案,而是需要时再load(localunsetkey(controlc))(localsetkey(controlc)a'forwardsexp)sexp就是一个expession,n个expression如果用括号括起来就算一个(expression的定义随语言的不同而有不同,在C,lisptex,html,fortran下皆有差异)Emacs使用手册

职业精品

精彩专题

上传我的资料

热门资料

资料评价:

/ 14
所需积分:2 立即下载

意见
反馈

返回
顶部

Q