emacs auto用法

合集下载

Emacs编辑器的使用

Emacs编辑器的使用

Emacs编辑器的使用Emacs编辑器的使用A.1Emacs简介前面已经介绍过一种全屏幕文本编辑工具Vi,这里将介绍另外一种功能强大、应用也非常广泛的全屏幕文本编辑器Emacs。

Emacs全称为Editor MACroS,由于其移植性极好,所以在当今世界的几乎任何一个操作系统上都可以见到它的身影。

现在的Emacs已经超出了原来的单一的文本编辑功能,可以用来管理文件、阅读公告板,甚至可以进行WWW浏览。

另外Emacs源代码可以使用C、C++、Lisp等语言定制,对一些编程爱好者来说,这无疑是一大福音,同时也使其灵活性大大增加。

Emacs编辑器的使用、操作与使用其他标准的文本编辑器一样。

键盘上普通的按键用来输入字符,而编辑器的操作命令是通过键盘上的一些特殊的按键来实现的,例如Ctrl、Alt等控制键。

与Vi不同,Emacs编辑器没有特定的输入模式与命令模式之分。

在输入文本时,也可以执行编辑命令,例如用Ctrl 键来移动光标、保存文件等,而不必忍受切换模式的麻烦。

Emacs 编辑器是一个复杂且非常灵活的编辑器.它有好几百个编辑命令。

Emacs编辑器也有一些特殊的特性,例如多窗口特性,可以在编辑文件时同时显示两个窗口。

也可以同时打开并对多个文件进行编辑与操作,并在屏幕上与之对应的编辑窗口内显示各个文件。

Emacs编辑器通过巧妙地控制、操作工作缓冲区来实现其强大、灵活的功能。

Emacs编辑器可以被认为是面向缓冲区的编辑器。

在任何编辑器中编辑文件时,该文件将首先被拷贝到工作缓冲区中,而所有的编辑操作都在工作缓冲区中进行。

许多编辑器在编辑文件时仅开辟一个工作缓冲区,因此仅能打开一个文件。

而Emacs编辑器可以同时开辟并管理多个工作缓冲区,因此允许同时对多个文件进行编辑操作,还可以用编辑缓冲区来保存、删除或拷贝文本,用户甚至可以开辟目己的缓冲区,并在这些缓冲区中保存文本,必要时可以把这些缓冲区内的文本保存到文件中。

emacs中文手册-入门篇

emacs中文手册-入门篇

前言【写给读者的话】这篇文章纯粹是我个人在学习使用emacs编辑器过程中实践的记录,其中语言文字上面也许会有些错误,希望读者发现之后能够帮我纠正,在此先谢了。

这里的每个命令都经过我亲身的实践,关于emacs编辑器系统一些的简易点的中文资料不是很多,所以学习有一定的难度,我的愿望是大家能够花费尽可能短的时间,掌握emacs编辑器的使用方法。

如果你仅仅是为了临时使用这个工具来临时做一些事情,那么本文也适合你,你只需要看本前言中的【最基本命令】一节即可。

如果有人转载,希望您能注明出处和作者;如果将本文用于商业行为,希望您能先通知我;希望大家能够互相体谅,尊重对方的劳动成果。

本文包含了基本的emacs编辑器的使用,目前本人也在最初的学习过程中,希望大家能够在自己空闲时间内共享资料积极交流.【引言】有一种编辑器叫emacs,其实很早就听说了它的大名。

之前我使用linux,看到舍友用vi编辑文件,于是我也自然的用了几次vi,感觉很难用,但是还是艰难地会了几个最基本的vi操作:打开文件,编辑文件,保存文件,撤销,删除,复制,剪切,粘贴。

后来和舍友聊天,他说还有一个叫做emacs的编辑器,于是我就知道了原来linux下面两个最著名的编辑器,emacs和vi.当时我想学学用emacs,不过还没开始就放弃了,因为我连vi都还没有用好,还想再学emacs?做人不能太贪,还是把我刚学会的几个vi命令好好消化消化吧。

于是我就开始使用vi了,一边使用,一边查找自己想要知道的新的功能,一边记录,我记得那时候从大约2007-2008年之间吧。

2009年我进入了公司,大概能够磕磕绊绊地使用vi在linux中编辑文件了,关键的一个月,大约是2009年3月份,我在工作的时候全部使用vi看代码编辑代码编辑文件,晚上我还特地上网搜索关于vi的资料并且亲自实践学习,而且自己还整理了一个简易版的vi手册,到了现在2010年9月3日,我已经能够像说话一样使用vi了。

Emacs 快速指南SUMMARY

Emacs 快速指南SUMMARY

●特殊控制C-u 数字命令带参数的命令C-x C-c退出EmacsC-g终止失去响应的命令,或取消数字参数和只输入到一半的命令META系列组合键用来操作“由语言定义的单位(如词、句子、段落)”CONTROL 系列组合键用来操作“与语言无关的单位(如字符、行等)”ESC本身是一个字符键,而不是一个修饰键(modifier key)TAB自动完成●命令集扩展(EXTENDING THE COMMAND SET)C-x字符扩展。

C-x 之后输入另一个字符或者组合键。

M-x命令扩展。

M-x 之后输入一个命令名●基本的光标控制(BASIC CURSOR CONTROL)C-f 向右移动一个字符(forward)C-b向左移动一个字符(backward)M-f 向右移动一个词【对中文是移动到下一个标点符号】M-b向左移动一个词【对中文是移动到上一个标点符号】C-n移动到下一行(next)C-p移动到上一行(previous)C-a移动到行首C-e移动到行尾M-a移动到句首M-e移动到句尾M-<移动到所有文字的最开头M-> 移动到所有文字的最末尾●页面光标控制C-v 向前移动一屏M-v 向后移动一屏●搜索(SEARCHING)C-s是向前搜索C-s C-w搜索光标到单词结尾部分C-r 是向后搜索结束搜索C-g会让光标回到搜索开始的位置<Return>则让光标留在搜索结果上●替换(replace)M-x repl s<RET>changed<Return>altered<RET>替换光标以下内容●插入与删除(INSERTING AND DELETING)<Delback>删除光标前的一个字符C-d删除光标后的一个字符M-<Delback>移除光标前的一个词M-d移除光标后的一个词C-k移除从光标到“行尾”间的字符M-k移除从光标到“句尾”间的字符(包括换行符)C-@ C-w移除位于这两点之间的所有文字M-w copyC-w cutC-y召回最近一次移除的内容,pasteM-y召回前几次移除的内容●撤销(UNDO)C-x u撤销以前的命令●列操作C-@ 在起始位置做标记C-x, r, k在结束位置剪切C-x, r, y在结束位置粘贴C-x, r, o在结束位置插入空白列,列缩进●文件对比(Ediff)M-x ediff 对比按提示输入的文件A和文件BV 同步浏览两个文件j 跳到第一个不同的地方n 跳到下一个不同的地方n+j 跳到第j个不同的地方●文件(FILE)C-x C-f寻找一个文件C-x C-s储存这个文件C-x k关闭这个文件M-x customize-variable <Return> make-backup-files <Return>关掉文件备份●缓冲区(BUFFER)C-x C-b列出缓冲区C-x s保存多个缓冲区●被禁用的命令(DISABLED COMMANDS)空格确认要执行被禁用的命令n取消执行被禁用的命令●多窗格(MULTIPLE WINDOWS)C-x 2将屏幕水平划分成两个窗格C-x 3将屏幕垂直划分成两个窗格C-x 1只保留一个窗格C-M-v滚动另外一个窗格C-x o切换到另外的窗格C-x 4 C-f在一个新开窗格里打开文件●自动保存(AUTO SAVE)M-x recover file<Return>恢复你的自动保存文件,不是“#sample.file#”●状态栏(MODE LINE)M-x fundamental-mode切换到 Fundamental模式M-x auto fill mode<Return>切换自动折行模式C-x f配合数字参数来重新设定行边界M-q手动折行●递归编辑(RECURSIVE EDITING LEVELS)ESC ESC ESC离开递归编辑●获得更多帮助(GETTING MORE HELP)C-h然后再输入一个字符以说明需要什么帮助C-h ?查看所有帮助C-h c 组合键命令的简要说明。

Emacs使用手册

Emacs使用手册

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-<chr>和M-<chr>组成的.超过两个以上的按键命令, Emacs会在萤幕最下面一行显示你按过什麽.这一行叫作mini buffer结束Emacs按 C-x C-c取消执行 C-g有些Emacs命令会跑很久, 可以用C-g中断之. 按错键也可以按C-g取消.上下移动 C-p 向上 (previous line) C-n向下(next line)左右移动 C-f 向右 (forward) C-b 向左 (backward) 其实Emacs内部没有行的概念, 把一篇文章放在一个大buffer里面, 所以C-f (forward)就是向档尾移动, C-b (backward)是移回去的意思, 一次一个字. 翻页下一页 C-v (view next screen)上一页 M-v翻页时,上一页末尾会留一点在萤幕最上面,以维持连续性.Emacs在游标接近萤幕最下方时会自动跳半页, 把档案往前挪一点, 方便阅读.重画萤幕 C-LEmacs里面游标的专有名词叫point. point == 游标目前的点游标一次跳一个字(word) M-f 往後跳 M-b注意 C-f 与 M-f, C-b 与 M-b的对称性.移到行头 C-a 行尾 C-e移到句首 M-a 到句尾 M-e(M-a 到上一个句点後面,一个句子的起头.M-e 到句点後面)移到档头 M-< 档尾 M->删除游标目前指的/後面的字 C-d前面的字 DEL (Delete键)DEL的正名叫Rubout (Rub out)M-DEL 往回删一个字(word)M-d 往前删 (游标後面)C-k 删至行尾 (kill)M-k 删到一句子结尾(删到句点) (kill)注意Backspace = C-h 在Emacs下是help的意思後面有(kill)的, 表示此删除的动作是kill, 不太等於delete.emacs会把kill掉的东西放到kill ring去, 算是一种暂存的地方,以後可以叫出来.见 yank说明.Undo: C-x uC-_ 等於 C-x u 有些DEC终端机, C-/就是C-_有时等於C-Shift- -重复执行举例, 向右移 8个字, C-u 8 C-fC-u 在Emacs里是蛮特别的,用来设定一些引数(argument/repeat count)给其後的命令.C-u 2 0 C-n 向下移 20行有一个特别的例外, C-u 3 C-v 不是翻三页, 而是整个萤幕向上移三行.据说这比较有意义.C-u 1 0 C-x u UNDO 10次给C-L一个引数会怎麽样:C-u 0 C-l 会重画萤幕,并且把目前的行移到萤幕第一行.另外, C-u 100 等於 M-100C-u 数字等於 M-数字X windows 下,C-left C-right 一次移一个字(word).C-up C-down 移动一段 (paragraphs/C语言的话是block)Home = C-aEnd = C-eC-Home = M-<C-end = M->PgUp PgDn = M-v C-v设定重覆次数更加简单,比如要向右移10个字 C-1 C-0 right-arrow 就是按住CTRL, 然後打10就对了, 比 C-u 1 0 简单.Mouse中键用来选取有hi-light的地方.右键是menu-button如果不小心按两次ESC, 等於 M-ESC, 会有一个讯息跑出来说你按到一个被disable的命令. 这是高级指令, 作者认为初学者用不道,所以会问你要不要启动它, 一般回答no.如果某一行太长, 萤幕显示不下, Emacs会在萤幕最右边打个$,表示此行未完,右边还有.把一行拆成两行: 在想拆处按Enter即可.合并两行为一行: 在行尾按C-d (或行首按DEL)Yank: 吐出被删掉的(killed)东西.只要用kill (C-k, M-k等) 删除, 超过一个字的资料,emacs就会把它存起来, 然後C-y 可以把它叫出来. 功能跟Cut & Paste一样. Kill 和delete不一样, 只有被kill掉的东西才能用yank吐回来.游标在同一地方不动, 连续kill掉的资料会被当成一次kill掉的,yank时会一起回来.被Kill掉的资料是放在称作 kill ring的资料结构上面, ring就是个圆圈,被kill掉的东西会依序摆在圆圈上. yank 会放回最近一次kill掉的资料.如果不是你想要的话, 用M-y 可以换. (M-y就是告诉emacs, 不对不对,我不是要这一个,换前一个给我). M-y 要紧接在C-y之後.拷贝文字的方法== 连续 C-k 几次, 把要拷贝的行全部删掉,然後按 C-y 弄回来. 再到想复制的地方按一次C-y, 就成了.把要拷贝的资料kill掉在yank回来好像很笨. 是有比较文明的方法, 那就是M-w, 不过较麻烦.首先,要先设标记. Mark 用 C-SPC 或 C-@ 设. 然候把游标移到另一端, 按 M-w 就可以把 mark 到 point 间的字存到kill ring上. point 就是游标的意思.Emacs不会把Mark起来的地方用highlight表示, 除非在X下.在X下, 可以用M-w 来拷贝用滑鼠反白的文字.kill & yank 就是 cut & paste的意思.以上大部份指令对Bash的命令列编辑也有效档案操作:读档: Emacs术语叫 finding a file.C-x C-f 然後在mini-buffer输入档名. 输入档名时, SPC键有auto-complete的功能,或者会秀出到目前为止档名前几个字和输入一样的. (TAB键也有类似功能)C-x C-f 叫 find-fileC-x C-s 存档 (save current file, save current buffer)C-x s 存所有的档C-x i 插入档案把另外的档案的内容读入目前编辑区内视窗Emacs把档案读进来,存在buffer中.我们透过window来看/编辑buffer.两个视窗会把萤幕切成两部份, 他们可以同时显示相同的, 或不同的档案.对初学者而言, 最需要的是记住怎样让不想要的视窗消失:C-x 0 关掉目前的视窗C-x 1 会让目前的视窗占满整个萤幕 (One Window),取消/关掉其他的视窗.Emacs里面有许多功能都会开一个小视窗来和使用者沟通, 显示讯息.有时候不会自动消失很讨厌, C-x 1 就很有用.另一个功能是如何跳到另一个视窗.C-x o (other-window)C-x 2 把目前的视窗切成两个 (水平分割)C-x 3 (垂直分割)C-x 4 是一串与视窗有关的指令.C-x 4 是一串与视窗有关的指令.C-x 5 则是扩展到X的视窗, 称为frame.C-x 5 2 就是再开另一个X视窗 (frame).多档编辑:C-x C-b 看目前有那些buffer (buffer就是emacs放开起的档案的地方).C-x b 然後在minibuffer输入buffer的名字,可以切换编辑buffer.TAB键也有作用. 有些内部的buffer (就是没有档案的buffer), 是用*开头和结束, 这个也要打, 如*scratch*最后提醒:C-x 1 可以把多馀的视窗关掉.Emacs扩充指令前面介绍的emacs按键大部份都是C-<chr> 或者 M-<chr>的形式. 这是最简单的按法, 由一对按键构成一个指令.Emacs的按键可以超过2个以上. 如 C-x 1 或 C-x C-b.一般超过一个按键组合的命令都是用C-x 开头. 另外你也可以直接下命令. 按 M-x 之後就可以打一个Emacs命令来执行. 一般这些命令名字都很长, 不过都不常用. 等一下我们会介绍一些. 还有介绍怎麽把这些命令设成按键指令.C-x C-c 就是结束Emacs. 不过一般Emacs很笨重, 一旦起动就不轻易退出. 所以比较常用的是C-zC-z 把Emacs暂停, 回到命令列. 当你下次再需要编辑时,打fg %emacs就可以把Emacs唤醒.在X下, C-z会把emacs缩成iconmode lineemacs编辑画面由编辑区(buffer) 状态列 (modeline) 和对话区 (minibuffer) 构成. 这里解释 modeline 显示的讯息.以下是个范例:--**-XEmacs: xemacs.qs (Fundamental)----74%-------由後面往前解释, 74% 表示游标的位置.(Fundamental)表示编辑模式.这是最原始的模式. 编辑不同种类的文章可能希望用不同的模式, 比如说C-mode, lisp-mode, tex-mode, text-mode 等等. 在不同模式下可能多一些按键出来.举例text-mode.M-x text-mode可以切入text-mode, 这是一般人编辑文字使用的模式. 和Fundamental mode没什麽差异. 不过游标移动时, Emacs对一个字的定义就有所不同, 因而M-f M-b 等移动一个字, 一个段落的指令就可能会停在标点符号的前面.此时状态列变为... (Text)----70%---以上说的是Major mode. 另外还有minor mode, 其实就是一些额外的功能.比如说, M-x auto-fill-mode 则状态列显示 (Text Fill).auto-fill就是自动断行, 让文章每行固定有70个字.M-X fundamental-mode 可以变回来.这里要说明一下, emacs在 minibuffer下有auto-completion的功能,也就是打M-x fund 然後按 SPC, 它会自动补全 fundamental-mode,不用全打.如果有两个以上的选择,它会告诉你.这个功能对find-file (C-x C-f)等等档案编辑功能也有效.前面提过.最後解释两个**号. 右边的*表示文章被修改过了.左边的* 表示这个编辑区(buffer)可以修改.有一些emacs的buffer是read-only buffer, 就会标成%%%表示档案是read-only.C-x C-q 可以解开read-only的锁定, 无论如何你要改这个编辑区.这是个toggle指令, 如果原来是可以修改的, C-x C-q会把它切成 read-only.Search没有Search 功能的编辑器简直就是小朋友的玩具. Search是一项很重要的功能, 所以emacs也提供的很完善.C-sC-rM-x re-search-forwardM-x re-search-backwardM-x search-forwardM-x search-backward以上这些指令是基本的search指令. C-s, C-r是increamental search,就是你打字的同时, emacs就直接帮你找. 一个是forward, 一个是backward.找到了怎麽办? 按C-g可以取消搜寻, 跳回原来的位置. 按Enter就让游标停在找到的地方 -- 此时minibuffer显示:Mark saved where search started 什麽意思? 就是isearch帮你在原来的位置设了一个mark, 然後把point (cursor) 移到新的位置.想跳回去原先的地方?C-x C-x 就可以了.(exchange-point-and-mark)C-u C-SPC 可以依序跳回前几次设mark的地方.(C-SPC是设mark, 给它一个argument, 就是反动作)(还记不记得C-u 可以给後面的指令设一些参数.有些指令拿这个参数来当作repeat count,有些指令就只拿来当作on/off, true/false, set/clear而已)M-x re-search-forward可以让你用regular expression搜寻.M-x search-forward则没有increamental的功能.另外一个指令, 作用和grep很像:M-x occure和search相提并论的就是replace.M-x replace 然後按 SPC, 就知道了.Emacs的设定:Emacs的设定档是 $HOME/.emacs你应该多少知道, emacs是用lisp写成的编辑器, .emacs档也都是要用lisp的语法设定. emacs用的lisp 称为elisp, 和一般的lisp差一点点.有一个info page, emacs-lisp-intro, 深入浅出的介绍emacs lisp.如果你还不会, 不懂programming, 强烈建议你看这份文件. 如果你会texinfo, 你可以把它很漂亮的印出来. (内容一点点而已, 两三天就看完了)如果你把.emacs搞砸了, 进emacs很奇怪, 怎麽办?1. 用 vi 改 .emacs :>2. emacs -q 进 emacsMajor Modes一般常见的emacs major mode有fundamental-modetext-modelisp-mode 有自动对括号/重排, 直接执行lisp code功能.c-mode/cc-mode c-mode是比较旧的c-mode, cc-mode应该是目前新的c-mode. 有自动重排/对括号的功能.也可以在emacs内compile, 跳到compiler error修正错误. 执行程式时debug. (配合dbx/gdb)compile是透过Makefile进行.tex-mode Tex/Latex编辑模示. 可能是打一些奇怪的标点符号比较方便.<programming-language>-mode同lisp/cc-mode. 如果是interpreter的话,emacs通常都可以直接执行/debug.<programming-language>-mode还有tags的功能, 後述.html-mode, texinfo-mode, sgml-mode: 编写html, texi, sgml之用.w3-mode WWW browser. 在x-win上不满意,但可以接受...TagsTags 是一个显为人知的功能? 所以我想提一下. 这不是emacs发明的,而是vi 原本的特异功能. emacs只是发扬光大而已.假设你有一个目录, 里面是一个程式的原始码, 比如说, tin 的原始码,放在 ~/tin-1.3beta 下面. 你想看它们.首先, 叫emacs cd到该目录:M-x cd然後, 建立tag table.tag table 就是一张对照表, 记录哪个符号(variable/function call)对映到哪个档案的哪个地方. 有这张表, emacs可以让我们快速的在程式码内游走. 一般这张表是一个档案, 叫作TAGS (大写)M-! etags *.[ch]M-! 是执行external shell command的意思. etags就是emacs的建表程式.你只要告诉它你的source code在那□即可.vi的话是使用ctags这个程式, 它建出来的档名叫tags (小写). 因为我们介绍emacs, 所以不管它.然後, 怎麽看程式? 你知道所有的C 程式都是由main()开始, 所以你想找到main()在哪个档案. 这时只要按 M-. 然後emacs会问你tag table在哪里. 因为我们已经cd到该目录, 直接按enter就好了. 然後输入main,emacs就会把你带到main(){ ... }去.如果你看到某个程式片断呼叫一个你没看过的函式, 你可以把游标移到该函式的名字上, M-. ENTER 就搞定了.如果 emacs找错了 (比如有变数和函式同名, emacs跳到变数去),那你可以用 C-u M-. 找下一个.在编辑程式码的时候, M-SPC 很有用, 它会把游标附近的空白缩成一个.在其它地方也有效.Emacs的一些package:M-x dired (或C-x d)游走/编辑目录, 就是档案总管的意思 :)M-x man 就是man pageM-x shell 开个command prompt, 不过不能跑vi,elm, tin...M-x gnus 读新闻/读信M-x rmail 读信M-x vm view mailM-x mh-rmail 读信 (package mh-e)M-x mh-smail 送信 (package mh-e)强列建议改用emacs读news/bbs. 世界会更美好!读信的话就要看你的感觉. 这些读信程式都会把信从系统的mail folder搬到自己的目录下, 占用quota, 我不喜欢 :p 建议elm或mutt.除非参加mailling list配合procmail. 不然不实用.用mh-e 须要装mh 这个外部程式, 不太好. 建议vm 或 gnus.写完信, C-c C-c 就可以送信.如果你的资料用rcs/sccs作版本管理, emacs自动会起动version control(minor mode.), c-x c-q 变成check-in/check-out.如何取得更多的资讯:Emacs的lisp 经过多年的发展,已成为完整的self-documenting系统.很多东西都可以线上找到你要的资讯.前面说过,或者你已经不小心按backspace遇到了, C-h (就是backspace的ascii码) 在emacs里面是help 的意思, 它可以带出一串指令.常用的有:C-h F Emacs FAQC-h t Emacs 使用教学C-h n Emacs NEWS file, 介绍最近改版的新功能C-h i Info system. Info是gnu用来取代man page的系统,基本上和文字模示的WWW差不多. 有许多重要的资讯可以在这边找到. 如果你是新手, 建议你在x-win下看.不然, 按键 m (menuitem), SPC next pagel (last node: node就是章节的意思)u (up node)d (directory, 索引).BS (Backspace, back a page).如果全部只按SPC, 就跟man 一样.C-h k describe key, 告诉你按这个键执行那个lisp function.C-h f describe function. 告诉你function在作什麽.如果只按SPC, emacs会给你所有lisp 函数的列表, 和说明.C-h v describe variable 同function.C-h a apropos的意思(approximate). 给lisp function的部份字串, emacs帮你找.C-h b 列出目前所有的keybindingC-h m mode help. 列出目前的mode的特殊说明.C-c C-h 列出以C-c 开头的所有key-binding. 虽然说Emacs可以定义按键, 可是Ctrl- 开头的所有组合大概都用光了,只有C-c算是可以自定指令. 不过有些mode也侵犯这个空间.目前的convention是C-c <chr> 留给user, C-c C-<chr>留给package.有以上这些help, 你的emacs/elisp功力会随著时间成长.Elisp 简介:Emacs有三份手册.第一份是使用手册, 第二份是Elisp 手册, 第三份是Elisp 简介. 第三份的程度是入门级, 值得看. Elisp手册其实也写的很简单, 还教你lisp, 不过有点长, 适合参考.因为我lisp没有仔细学过, 所以:以下所言, 如有巧合, 那才是真的.Basic data type字串 (string) "Hello, World"字元 (char) ?a ; 问号开头atom & list:(1 2 3 4) 是一个list, 由 4个 atom 组成.pair: 中间是句点.(apple . 2)alist (associated list)就是一堆 pair的集合,就像perl/tcl的associative array.或者说是一个资料库, 一堆 (key, value) pair.'((Apple . 1)(Orange . 2)(PineApple . 3))vector (?)emacs 19用vector 来表示按键(key strok sequence)[f1] [f2] [f1 a]nil 就是空的list, 或者表示 falset trueForms我们写程式最好有样版让我们填空最简单了.Form 就是样版, 不过意义不太一样.Form 就是Elisp 可以接受的句型.lisp 解译器预设是对list的每个元素求值(evaluate),除非是 special form, 有特殊的定义. 比如说(defun FUNC (ARG-LIST)BODY ...)就是一个special form, 用来定义函式, 所以FUNC 不会被求值, 被当成symbol, ... (quote (LIST))这也是个special form, 叫 lisp 把 (LIST)当做symbol就好了,不要 evaluate.quote 很常用, 所以有个缩写:'(LIST) 等於 (quote (LIST))'Asymbol 可以表示一个Atom, 名称叫Asymbolset 可以产生/定义新的变数.(set 'hello 1); hello = 1; 注意我们用 'hello, 所以lisp不会evaluate hello的值.这家伙很常用, 也有简写.(setq hello 1)setq 就是set quote 的缩写. 这是个 special form, 不会对第二个元素求值. valuation在Emacs下, C-x C-e 可以执行(evaluate, 求值)游标左边的叙述.结果会出现在minibuffer.lisp-interaction-mode中 C-j 可以evaluate, 并且把结果append到 buffer.lisp 程式由一堆list 构成.称为expression.每个expression 都回传回一个值.有些expression有副作用, 如删掉一个字.(这跟C 的int delete_char() 意思一样, 它传回int,并且删掉某个char)定义函式:(defun NAME (ARGS-LIST)"注解" ; optional(interactive) ; optionalBODY)定义一个叫NAME的函式. BODY 是一堆expression.注解是用来给C-h f显示的.(interactive) 表示这个函示会和user/buffer作用.(interactive "B") 表示执行此函式先问user一个buffer的名字,然後当作参数传给它. (如, 当user透过 key-binding或者 M-x 呼叫此函式时)(interactive "BAppend to buffer: \nr")问user buffer name时, 提示号 Append to buffer:此function有两个引数,第一个是B, 就是buffer第二个是r, region用\n 隔开. (interactive "p") 用C-u 设的prefix 把它当作参数传给我.预设值==4. C-u C-f 向右移四个字一些lisp 函式:(list 1 2 3 4) 产生 '(1 2 3 4)(car '(1 2 3 4) 1(cdr '(1 2 3 4) '(2 3 4)(cons 1 '(2 3 4)) '(1 2 3 4)(cons 1 2) (1 . 2)(cons 0 (cons 1 (cons 2 nil)))等於 '(0 1 2){list 是用 pair 串起来的,用C 表示:pair: {Object *first, Object *second};*(pair[i].first) == i;pair[i].second == pair[i+1]; }(cons '(1 2) '(3 4)) '((1 2) 3 4)(setq a 1)(1+ a) ; a+1(+ 2 a) ; a+2(* 1 2 3 4)(current-buffer) ; 传回目前buffer的资料物件(switch-to-buffer (other-buffer))(set-buffer)(buffer-size)(setq current-pos (point))(point-min)(point-max)(message "Hello") ; 在minibuffer显示Hello(if (test)(then-part)(else-part))(cond ((test1) BODY1)((test2) BODY2)(t OTHER-WISE)(let ((var1 value) ; local variablevar2 ; no value(var3 value)...)BODY ...)(lambda (ARG-LIST) ...) 同 defun, 但是没有名字 (anonymous).可以存到变数去:(setq hello (lambda () (message "Hello,World")))(funcall hello)(goto-char (point-max))(defvar VAR VALUE "*注解") 如果VAR 不存在才定义. 有注解可以用C-h v 看. 注解打*号表是使用者可以直接改/ 这个变数本来就是给使用者设定用的.可以用 M-x edit-options 来线上设定 (emacs结束就没有了,不过edit-options可以给你所有可修改的变数的列表,你可以放到.emacs档内.(directory-files "./" t "\\..*")return a list of files under directory X(load "xxxx.el") 同#include <stdio.h>给使用者设定用的.可以用 M-x edit-options 来线上设定 (emacs结束就没有了,不过edit-options可以给你所有可修改的变数的列表,你可以放到.emacs档内.(directory-files "./" t "\\..*")return a list of files under directory X(load "xxxx.el") 同#include <stdio.h>(setq load-path (cons "~/emacs" load-path)) ; load的search path.(autoload ...) 不像load会直接evaluate 整个档案, 而是需要时再load.(local-unset-key [(control c)])(local-set-key [(control c) a] 'forward-sexp)sexp 就是一个expession, n个expression如果用括号括起来就算一个.(expression的定义随语言的不同而有不同, 在C, lisptex, html, fortran 下皆有差异)。

Emaces编辑器使用

Emaces编辑器使用

Emaces编辑器Emaces不仅是一款功能强大的编辑器,也是一款集编辑、编译、调试于一体的开发环境。

在Emaces里一切都是在内存中进行的,Emaces只有一种模式,也就是编辑模式,而它的命令全靠功能键完成。

与vi相比,Emaces的一个显著特点是可以使用鼠标进行大部分的操作。

在Emaces中的功能键基本上都是由C(<Ctrl>键)和M(<Alt>键)的组合完成的。

例如,"C-f"就是按住<Ctrl>键同时键入<f>,而“C-x C-c”则代表先按住<Ctrl>键再同时按住<x>键,再按住<Ctrl>键并同时按住<c>键。

1.Emacs的启动与退出启动Emacs很简单,只需在命令行键入emacs[文件名]即可(若缺省文件名,也可在Emacs 编辑文件后另存时指定),也可从“应用程序”——>“编程”——>“emacs”打开,单击任意键进入Emacs的工作窗口,Emacs的工作窗口分为上下两个部分,上部为编辑窗口,底部为命令显示窗口。

用户执行功能键的功能都会在底部有相应的显示,有时也需要用户在底部窗口输入相应的命令,如查找字符串等。

Emacs会为每一个作为参数输入的文件打开一个缓冲区,并最多可以显示两个缓冲区。

如果在启动Emacs时没有指定任何文件,那么将会看到一个称为*scratch*的缓冲区。

若想要退出Emacs的工作窗口,则可使用功能键“C-x C-c”退出。

若当时所编辑的文件还未保存,则系统会提示是否保存该文件等。

2.Emacs的基本编辑Emacs只有一种编辑模式,因此用户无需进行模式间的切换。

下面介绍Emacs中的基本编辑功能键。

1.移动光标掌握移动光标对应的功能键后,可以在所有类型的终端上工作,工作效率比使用“上”、“下”、“左”、“右”方向键移动光标更高。

C-f 向前移动一个字符C-b 向后移动一个字符C-p 移动到上一行C-n 移动到下一行M-f 向前移动一个单词M-b 向后移动一个单词M-e 光标前移一个句子M-a 光标后移一个句子M-} 光标前移一个段落M-{ 光标后移一个段落C-a 移动到行首C-e 移动到行尾M-<(M加“小于号”) 移动光标到整个文本的开头M->(M加“大于号”) 移动光标到整个文本的末尾2.剪切和粘贴在Emacs中可以使用“Delete”和“BackSpace”删除光标前后的字符,这和用户之前的习惯一致。

emacs教程

emacs教程

教程简介本教程讲什么?第 1 页(共4 页)Emacs 是一个流行的无模式文本编辑器,有许多强大的功能。

本教程将教您使用 Emacs 的基础知识。

为了让您很快熟悉这个优秀的编辑器,本教程先讲述基本概念和常用操作,然后在这基础上提高。

要掌握使用 Emacs 的入门知识,需要经历陡峭的学习曲线。

我们的目的是帮您学会起初不熟悉的界面,这样,Emacs 的力量和用途就变得明显。

然后您就可以根据本教程末尾的参考资料和技巧,自己去深入研究。

谁应该学习本教程?第 2 页(共4 页)Emacs 的主要用户是程序员和 Web 开发者,他们要充分利用这个强大的灵活的文本编辑器,从而提高他们的效率。

另外,对于在 UNIX 或相似环境下履行管理职责的人来说,对 Emacs 的起码的一点熟悉是有用的。

在您开始前第 3 页(共4 页)在学习本教程的过程中,所有您需要的就是 Emacs 的副本,GNU Emacs 或 XEmacs。

如果您正在运行 Linux,那么您可能已经装入了它。

检查的方法是在命令行提示符后输入 emacs。

如果什么都没发生(或您得到“command not found”之类的消息),那么请用您的分发版附带的软件包工具来安装其中的一个软件包。

运行另一种操作系统?查看链接在上面的站点,找到您能用的 Emacs 版本。

作者简介第 4 页(共4 页)Brian Bilbrey 是系统管理员、Web 管理员、产品和 PWB 设计师、作家和 Linux 的倡导者。

他的名片被人读作 NPS,NPS 代表 No Particular Specialty,意思是“没有特别的专业”。

Brian 在日常工作中使用 Linux,象有些人换衣服一样换他的窗口管理器和喜欢的应用程序。

新的分发版就象面包和水那样不可或缺,目前,Brian 正在高兴地试用 Gentoo Linux。

他的 Linux 活动和其它经历的每日网页更新记录可在 找到。

第2部分学习 Emacs的基本模式和编辑特性

第2部分学习 Emacs的基本模式和编辑特性
缺省模式 尽管暂存缓冲区通常设置为 Lisp Interaction 模式,但它并不是缺省 Emacs 模式。要找出 缺省模式是什么,可以切换到一个新的缓冲区:输入 C-x b 并指定 lamb.txt 作为缓冲区的名称。 输入 C-x 1 关闭帮助缓冲区。 您将看到这个新的 lamb.txt 缓冲区有了新的主要模式,即 Fundamental 模式。这就是 Ema cs 缓冲区的缺省模式。在所有 Emacs 模式中,这种模式是最简单明了的,拥有最少的特殊键绑 定和设置。在这种模式中,Tab 键将按照您所希望的方式进行工作。
本教程的这一部分向您介绍成功地使用 Emacs 模式所需要了解的内容:
如何知道哪些模式是活动的
如何获取当前模式及其功能的描述
如何调用一个模式
您应该了解哪些模式
查看哪些模式是活动的
如本系列文章的第一个教程中所述,靠近 Emacs 窗口底部的突出显示栏,被称为模式行, 可以告诉您当前缓冲区的所有情况——包括哪种模式当前是活动的。在模式行右边的括号里注明了 当前的模式。最先列出主要模式的缩写名称,后面是任何次要模式的缩写名称。
另外,一些模式提供了额外的指示器,这些指示器也会在模式行里显示出来。例如 Line Nu mber 模式,通过在 L 后面跟上行号来表示,该行号是光标在缓冲区中的当前位置。
获得当前模式的描述
可以使用 describe-mode 函数,该函数与 C-h m 进行了绑定,用于获得当前模式的描述。 当您运行这个函数时,将打开一个新的帮助缓冲区,其中列出了所有的键绑定,这些键绑定是您进 行输入的缓冲区的当前主要模式所特有的,后面跟的是应用于任何处于打开状态的次要模式的绑 定。
文件
目录
权限
文件系统层次结构

Emacs 快速指南

Emacs 快速指南

Emacs 快速指南(Emacs tutorial)。

Copyright (c) 1985, 1996, 1998, 2001, 2002 Free Software Foundation.Emacs 命令通常包含有 CONTROL 键(有时候以 CTRL 或 CTL 来标示)或是META 键(有时候以 EDIT 或 ALT 来标示)。

为了避免每一次都要写出其全名,我们将会使用下述的缩写:C-<chr> 表示当键入字符 <chr> 时按住 CONTROL 键。

因此,C-f 就是:按住 CONTROL 键再键入 f 。

M-<chr> 表示当键入字符 <chr> 时按住 META 或 EDIT 或 ALT 键。

如果没有 META 、 EDIT 或 ALT 键时,则可以用「按一下 ESC 键然后放开,再键入 <chr> 的步骤」来作为替代。

我们以 <ESC> 来表示 ESC 键。

重要备忘录:要退出 Emacs 会话(session),键入 C-x C-c (两个字符)。

位在左侧边界的「>>」字符是让您可以试著使用的命令的提示。

举例来说:<<Blank lines inserted around following line by help-with-tutorial>> [Middle of page left blank for didactic purposes. Text continues below]>> 现在键入 C-v (View next screen)以移到下个屏幕。

(试试看,键入字符 v 时,按住 CONTROL 键)从现在开始,您应该在每次阅读完目前的屏幕时做一次这个动作。

要注意的是,当您从一个屏幕移到另一个时,中间会有两行重复;这样做是为了提供一些连续性,让您可以接续地阅读文字。

css auto用法

css auto用法

css auto用法
CSSAuto用法是指在CSS中使用auto属性来定位和调整元素的位置和大小。

auto属性可以用于多种CSS属性,如margin、padding、width、height、position等。

当使用auto属性时,浏览器会根据元素的宽度和高度自动计算出相应的属性值。

例如,当设置一个元素的宽度为auto时,浏览器会根据元素的内容自动计算出宽度值。

在布局和定位元素时,auto属性也非常有用。

例如,在使用绝对定位时,设置left和right为auto可以让元素水平居中。

同样地,设置top和bottom为auto可以让元素垂直居中。

此外,使用auto属性还可以避免在响应式设计时出现的宽度和高度问题。

当元素的宽度和高度设置为百分比时,使用auto属性可以确保元素在不同屏幕尺寸下的正确显示。

总之,CSS Auto用法是CSS中非常实用的技巧,可以帮助开发者更方便地布局和定位元素,同时也能提高网站的响应式设计能力。

- 1 -。

emacs高级用法

emacs高级用法

emacs高级用法一、Emacs基本用法1. Emacs is a super - powerful text editor. I can just open it up and start typing away like I'm pouring my thoughts onto a digital canvas. For example, if I want to write a simple note, I open Emacs, and it's like stepping into a blank room where I can arrange my words however I like. “Emacs就像一个超级强大的文本编辑器。

我只要打开它就可以开始输入,就好像把我的想法倾倒在数字画布上一样。

例如,如果我想写一个简单的便签,我打开Emacs,这就像是走进一个空白的房间,我可以随心所欲地排列我的文字。

”2. One of the basic things in Emacs is moving around. I use the arrow keys, but there are also these cool shortcuts. It's like having a secret passageway in a maze. For instance, Ctrl - f moves the cursor forward one character. “Emacs的基本操作之一就是移动光标。

我可以使用方向键,但也有一些很酷的快捷键。

这就像是在迷宫里有一条秘密通道。

例如,Ctrl - f可以将光标向前移动一个字符。

”3. Saving a file in Emacs is a piece of cake. I just hit Ctrl - x Ctrl - s. It's as easy as closing a box after you put something in it. “在Emacs 中保存文件很容易。

emacs命令使用说明

emacs命令使用说明
Prepend region to text in register r.
Saving Rectangles in Registers
C-x r r r
Copy the region-rectangle into register r (copy-rectangle-to-register).
With numeric argument, delete it as well.
C-x r i r
Insert the rectangle stored in register r (if it contains a rectangle) (insert-register).
M-e 句尾
M-{ 上一个段落
M-} 下一个段落
C-v 屏幕上卷一个屏
M-v 屏幕下卷一个屏
C-M-v 另一个窗口下卷一个屏幕
C-M-V 另一个窗口上卷一个屏幕
M-< 文件头
M-> 文件尾
C-u n 或 M-n 重复执行n次后继命令
// -*- C++ -*-
语法高亮
不是C模式专有,顺便提一下,M-x global-font-lock-mode RET 或在.emacs中加入(global-font-lock-mode t)。在console下,Emacs21才支持语法高亮。(语法高亮,不同关键字用不同的颜色来突出)
C-x r i r
Insert text from register r (insert-register).
M-x append-to-register RET r
Append region to text in register r.

Emacs教程中文版

Emacs教程中文版

Emacs教程中文版2007-12-18 10:14Emacs 的命令通常包括控制键(就是上面标有 Ctrl或Ctl的那个)或者是META 键(上面标有EDIT或ALT)。

为了方便起见我们将用下面的缩写来代替这些键的全称:C-<chr> 意思是当敲入字符<chr>时同时按住控制键,因此,C-f表 示:按住控制键并且按 f 。

M-<chr> 表示当键入<chr>时按住META或ALT或EDIT键。

如果没有META 或ALT 或EDIT键,则用ESC键代替。

<ESC>表示ESC键注意:退出Emacs,按C-x C-c(两个字符)。

在文本左边区域的“>>”符号表示让你试着使用一个命令。

比如:>> 现在键入C-v(观看下一屏)移动到下一屏。

(就象前面说的,按v的同时也按住控制键)。

从现在开始,每当你读完一屏的时候都可以用它来翻屏。

注意在翻屏后会保留上屏的最后一行;这是为你继续阅读文本提供某些连贯性。

你所需要知道的第一件事是如何把光标从一个地方移动到另一个地方。

你已经知道了如何向前翻一屏--用 C-v。

要向后翻一屏,键入M-v。

>> 试着键入 M-v 和 C-v 几次。

* 摘要(SUMMARY)---------------------------下面几个命令对整屏观看时有用:C-v 向前翻一整屏。

M-v 向后翻一整屏。

C-l 清除屏幕并重新显示所有的文本,然后把光标移动到屏幕的中央。

(注意是Control-L,而不是 Control-1)。

>> 寻找光标,并且注意它在文本里的位置。

然后键入C-l。

再寻找光标你会注意到光标现在会出现在同样的文本附近。

* 基本光标控制(BASIC CURSOR CONTROL)-----------------------------------------------------------------整屏整屏的移动是很有用的,可是如何把光标移动到屏幕上文本里的一个指定的地方呢?有好几个方法可以实现。

【Linux】Emacs教程中文版

【Linux】Emacs教程中文版

【Linux‎】Emacs‎教程中文版‎Emacs‎的命令通常‎包括控制键‎(就是上面标‎有 Ct rl或‎C tl的那‎个)或者是ME‎T A键(上面标有E‎D IT或A‎L T)。

为了方便起‎见我们将用‎下面的缩写‎来代替这些‎键的全称:C- 意思是当敲‎入字符时同时按住‎控制键,因此,C-f表示:按住控制键‎并且按f 。

M- 表示当键入‎时按住ME‎T A 或AL‎T或EDI‎T键。

如果没有M‎E TA 或ALT或‎E DIT键‎,则用ESC‎键代替。

表示ESC‎键注意:退出Ema‎c s,按C-x C-c(两个字符)。

在文本左边‎区域的“>>”符号表示让‎你试着使用‎一个命令。

比如:>> 现在键入C‎-v(观看下一屏‎)移动到下一‎屏。

(就象前面说‎的,按v的同时‎也按住控制‎键)。

从现在开始‎,每当你读完‎一屏的时候‎都可以用它‎来翻屏。

注意在翻屏‎后会保留上‎屏的最后一‎行;这是为你继‎续阅读文本‎提供某些连‎贯性。

你所需要知‎道的第一件‎事是如何把‎光标从一个‎地方移动到‎另一个地方‎。

你已经知道‎了如何向前‎翻一屏--用 C-v。

要向后翻一‎屏,键入M-v。

>> 试着键入M-v 和 C-v 几次。

* 摘要(SUMMA‎R Y)---------------------------下面几个命‎令对整屏观‎看时有用:C-v 向前翻一整‎屏。

M-v 向后翻一整‎屏。

C-l 清除屏幕并‎重新显示所‎有的文本,然后把光标‎移动到屏幕‎的中央。

(注意是C o‎n trol‎-L,而不是 Contr‎o l-1)。

>> 寻找光标,并且注意它‎在文本里的‎位置。

然后键入C‎-l。

再寻找光标‎你会注意到‎光标现在会‎出现在同样‎的文本附近‎。

* 基本光标控‎制(BASIC‎CURSO‎R CONTR‎O L)-----------------------------------------------------------------整屏整屏的‎移动是很有‎用的,可是如何把‎光标移动到‎屏幕上文本‎里的一个指‎定的地方呢‎?有好几个方‎法可以实现‎。

emacs 用法

emacs 用法

Emacs 是一款功能强大的文本编辑器,广泛应用于编程、写作和其他任务中。

以下是Emacs 的一些常用用法:1. 打开 Emacs:在终端中输入 `emacs` 命令即可打开 Emacs 编辑器。

2. 新建文件:使用 `C-x C-f` 快捷键(按住 `Ctrl` 键同时按下 `x` 和 `f` 键)可以在Emacs 中创建一个新文件。

3. 保存文件:使用 `C-x C-s` 快捷键(按住 `Ctrl` 键同时按下 `x` 和 `s` 键)可以保存当前正在编辑的文件。

4. 复制和粘贴文本:使用 `C-space` 快捷键来标记(或选中)要复制的文本,然后使用`M-w` 快捷键(按住 `Alt` 键同时按下 `w` 键)将其复制到剪贴板。

使用 `C-y` 快捷键(按住 `Ctrl` 键同时按下 `y` 键)将剪贴板中的文本粘贴到 Emacs 中。

5. 撤销操作:使用 `C-/` 快捷键(按住 `Ctrl` 键同时按下 `/` 键)可以撤销最近的操作。

6. 查找和替换文本:使用 `C-s` 快捷键(按住 `Ctrl` 键同时按下 `s` 键)可以在文件中查找指定的文本。

使用 `M-%` 快捷键(按住 `Alt` 键同时按下 `%` 键)可以查找并替换文件中的文本。

7. 编辑多个文件:使用 `C-x C-f` 命令打开一个文件后,可以使用 `C-x 2` 或 `C-x 3` 快捷键拆分窗口并在同一编辑器中打开另一个文件。

8. 运行 Shell 命令:使用 `M-!` 快捷键(按住 `Alt` 键同时按下 `!` 键)可以打开 Shell 窗口,并在其中运行命令。

这些只是 Emacs 的一些基本用法,Emacs 还提供了很多高级功能和自定义选项。

如果你想深入了解 Emacs 更多细节,可以查看 Emacs 文档或参考其他资料。

emacs 快捷键(包括C/C++模式)

emacs 快捷键(包括C/C++模式)
保存文件到磁盘 C-x C-s
保存所有文件 C-x s
插入其它文件的内容到当前缓冲 C-x i
用将要读取的文件替换当前文件 C-x C-v
到句尾 M-e
到段首 M-{
到段尾 M-}
到页首 C-x [
反向规则表达式查找 C-M-r
选择前一个查找字符串 M-p
选择下一个查找字符串 M-n
退出增量查找 RET
到函数尾部 C-M-e
到缓冲首部 M-<
到缓冲尾部 M->
滚动到下一屏 C-v
向下一行 C-n
到行首 C-a
到行尾 C-e
到句首 M-a
退出替换模式 RET
进入递归的编辑模式 C-r
退出递归的编辑模式 C-M-c
多窗口(Multiple Windows)
向后delete到表达式尾部 C-M-k
Kill区域 C-w
拷贝区域到Kill Ring M-w
Kill到下一个给定字符出现的位置 M-z <char>
标记一个函数 C-M-h
标记整个缓冲区 C-x h
Query Replace
交互式地替换一个文本串 M-%
交互式地替换一个规则表达式 M-x query-replace-regexp
(When two commands are shown,the second is for “other frame”)
删除所有其它窗口 C-x 1
上下分割当前窗口 C-x 2 C-x 5 2
以字为单位使用移动命令动态标记区域 M-@
标记一段 M-h
标记一页 C-x C-p
标记一个表达式 C-M-@
“P N B F”四个字母分别代表了四个词,用这四个词记忆这些组合键会更容易:

Emacs教程初步

Emacs教程初步

Emacs教程初步——轮子注:1.本文内容大都来自网络,我只时进行了分类编辑,版权属于原作者。

(公司内部使用,不要外传)2.如果你是第一次使用Emacs,可能感觉非常别扭,但不用担心,当你能够熟练使用一些基本操作后,你会喜欢上它的。

1.Emacs是什么Emacs是一种强大的文本编辑器,在程序员和其他以技术为主的计算机用户中广受欢迎。

Emacs,即Editor Macros(编辑器宏)的缩写,最初由Richard Stallman(理查德·马修·斯托曼)于1975年在MIT协同Guy Steele共同完成。

这一创意的灵感来源于TECMAC和TMACS,它们是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。

自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种分别是:1984年由Richard Stallman发起并由他维护至今的GNU Emacs,以及1991年发起的XEmacs。

XEmacs 是GNU Emacs的分支,至今仍保持着相当的兼容性。

它们都使用了Emacs Lisp这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。

在Unix文化里,Emacs是黑客们关于编辑器优劣之争的两大主角之一,它的对手是vi。

2. Emacs的安装和配置2.1 安装1)源码安装:从/pub/gnu/emacs/下载源码安装2)在Ubuntu上用sudo apt-get install emacs安装2.2 配置在~/目录下有个隐藏的.emacs文件(如果没有,可以自己创建一个),这个就是Emacs 的配置文件。

Emacs在启动的时候会读.emacs文件,根据里面的配置设置启动后的状态。

配置文件的内容要用elisp语言编写。

在这里你可以设置自己的颜色主题,字体,快捷键,以及一些Emacs模式(如emacs wiki)的配置等等。

emacs

emacs

Emacs 基本编辑命令(1)Emacs的强大功能相信大家都已经听说过了, 熟悉vi或windows下IDE 工具开始使用时Emacs会觉得十分难受. 这一节讲一下基本的几个编译命 令, 首先说明一下以`C-'开头的是 `Ctrl'键加上后面的键一块按下, 例如 `C-x 0'就是Ctrl键和 x键一块按下, 然后再按下0, 以 `M-'开头的就是META键, 一般就是 Alt键.•`C-x C-f 文件名' -- 打开文件•`C-x C-s' -- 保存文件•`C-x C-c' -- 退出Emacs•`C-x u' -- 取消上一次操作有了这四个基本指令就可以进行通常的编辑保存功能了, 不过现在你 肯定感觉不到Emacs 的强大功能. 甚至会觉得Emacs还不如Windows的 Notepad, 别急, 熟悉一下Emacs后我们再来感受Emacs的超强功能.Emacs基本编辑指令(2)我们继续讲解Emacs的基本指令, 这一部分讲解基本的光标指令, 你 可以用Emacs打开一个文件, 我们一起来"运动"•`C-v' -- 向后翻一页•`M-v' -- 向前翻一页•`C-l' -- 将当前行居中•`C-f' -- 向前移动一个字符`M-f' -- 向前移动一个单词•`C-b' -- 向后移动一个字符`M-b' -- 向后移动一个单词•`C-n' -- 向下移动一行`C-p' -- 向上移动一行•`C-a' -- 移至当前行的第一个字符`M-a' -- 移至当前所在句子的第一个字符•`C-e' -- 移至当前行的最后一个字符`C-p' -- 移至当前所在句子的最后一个字符•`M-<' -- 移动到当前窗口的第一个字符`M->' -- 移动到当前窗口的最后一个字符注意: `M-<'输入时要同时键入`Alt', `Shift'和`,'这些命令前可以加入`C-u N'表示重复N次, 例如向下移动8行可以这 样按键`C-u 8 C-n'好了, 基本的移动指令就介绍完了, 可能这些键使用起来是不太顺手, 在本章最后, 我们将讲一下如何定制这些键, 使Emacs更加符合个人的使用 习惯.Emacs 中文设置JerryEmacs发展到今天, 功能已经十分完善和强大, Emacs有强大的多语言编辑功 能, 当然设置的得当才能发挥出Emacs的强大功能, 下面讲述一下在Windows 以及X Window上的多语言的设置问题3.1 系统对多语言的支持性3.1.1 Console环境这里的Console是像Windows下的cmd, command, Unix下的console, tty 的统称, Console 环境下, 只要本身能正常显示中文就可以了, Emacs自 带输入法, 基本上不用怎么设置就可以使用3.1.2 Windows系统Windows本身对多语言支持的已经是十分完善了, 只是要切换缺省语言 比较麻烦, 设置完后总要重启(针对Windows 2000和Windows XP), Emacs对中文的支持也因版本的不同而不同, 通常的方法和在X Window 下类似, 需要设置对应的字体, 而Windows下最好使用bdf 字体, 相关的 字体可以在XEmacs站点上下载到, 我用的是intlfonts-1.23.1.3 X Window系统X Window下首先需要汉化X, 使X能正常使用中文, 其实和Windows差不 多, 也不过是设置字体, 因为X本身已经对多语言提供支持(建议使用 XFree86 V4.2及以上版本), X上最好是把Windows下的那些ttf和ttc的 字体拿来使用, 毕竟不是免费字体, 作工还是要好一些3.2 中文设置3.2.1 通用配置这一部分是所有系统都要设置的(set-lan g ua g e-env i r o n m ent 'C hi nese-GB)(set-k e y b o ar d-c odi n g-s y ste m 'euc-cn)(set-cl i pb o ar d-c odi n g-s y ste m 'euc-cn)(set-ter mi nal-c odi n g-s y ste m 'euc-cn)(set-buffer-f i le-c odi n g-s y ste m 'euc-cn)(set-select io n-c odi n g-s y ste m 'euc-cn)(modi f y-c odi n g-s y ste m-al i st 'pr o cess "*" 'euc-cn)(set q d efault-pr o cess-c odi n g-s y ste m'(euc-cn . euc-cn))(set q-d efault pat h na m e-c odi n g-s y ste m 'euc-cn)3.2.2 Windows配置这一部分设置Windows下的字体, 解压intlfonts-1.2, 设置变量fonts-dir为所安装的字体目录(set q f o nts-di r "<pat h t o i ntlf o nts>")(set q b d f-di rect o r y-l i st(l i st(expan d-f i le-na m e "As i an" f o nts-di r)(expan d-f i le-na m e "C hi nese" f o nts-di r)(expan d-f i le-na m e "C hi nese.BIG" f o nts-di r)(expan d-f i le-na m e "C hi nese.X" f o nts-di r)(expan d-f i le-na m e "Et hio p i c" f o nts-di r)(expan d-f i le-na m e "Eur o pean" f o nts-di r)(expan d-f i le-na m e "Eur o pean.BIG" f o nts-di r)(expan d-f i le-na m e "J apanese" f o nts-di r)(expan d-f i le-na m e "J apanese.BIG" f o nts-di r)(expan d-f i le-na m e "J apanese.X" f o nts-di r)(expan d-f i le-na m e "Ko rean.X" f o nts-di r)(expan d-f i le-na m e "M i sc" f o nts-di r)(expan d-f i le-na m e "TrueT y pe" f o nts-di r)(expan d-f i le-na m e "T y pe1" f o nts-di r)))(set q w32-b d f-f i lena m e-al i st(w32-f i n d-b d f-f o nts b d f-di rect o r y-l i st))(create-f o ntset-fr om-f o ntset-spec"-*-f i xe d-m e di u m-r-n o r m al-*-16-*-*-*-c-*-f o ntset-b d f,c hi nese-g b2312:-*-*-m e di u m-r-n o r m al-*-16-*-*-*-*-*-g b2312.1980-*,j apanese-ji sx0208:-*-*-m e di u m-r-n o r m al-*-16-*-*-*-c-*-ji sx0208.1983-*,k ata k ana-ji sx0201:-*-*-m e di u m-r-n o r m al-*-16-*-*-*-c-*-ji sx0201*-*,lat i n-ji sx0201:-*-*-m e di u m-r-n o r m al-*-16-*-*-*-c-*-ji sx0201*-*,j apanese-ji sx0208-1978:-*-*-m e di u m-r-n o r m al-*-16-*-*-*-c-*-ji sx0208.1978-*,t h a i-t i s620:-mi sc-f i xe d-m e di u m-r-n o r m al--16-160-72-72-m-80-t i s620.2529-1,la o:-mi sc-f i xe d-m e di u m-r-n o r m al--16-160-72-72-m-80-Mule L a o-1,t i betan-1-c o lu m n:-T i bM dX A-f i xe d-m e di u m-r-n o r m al--16-160-72-72-m-80-MuleT i betan-1,et hio p i c:-A dm as-Et hiom x16f-Me di u m-R-No r m al--16-150-100-100-M-160-Et hio p i c-U n i c od e,t i betan:-T i bM dX A-f i xe d-m e di u m-r-n o r m al--16-160-72-72-m-160-MuleT i betan-0")(set q f o nt-enc odi n g-al i st(appen d '(("MuleT i betan-0"(t i betan . 0))("GB2312"(c hi nese-g b2312. 0))("JISX0208"(j apanese-ji sx0208. 0))("JISX0212"(j apanese-ji sx0212. 0))("VIS C II"(v i etna m ese-v i sc ii-l ow er . 0))("KS C5601"(ko rean-k sc5601. 0))("MuleArab i c-0"(arab i c-digi t . 0))("MuleArab i c-1"(arab i c-1-c o lu m n . 0))("MuleArab i c-2"(arab i c-2-c o lu m n . 0))) f o nt-enc odi n g-al i st))(set-d efault-f o nt "f o ntset-b d f")注意: 上面的中文字体的大小只能为16,24,40,48, 因为intlfonts 中的BDF字体只有这几种大小的中文字体能匹配上面的chinese-gb2312的配置, 此外在Emacs 21.3中还可以这样设置(set-lan g ua g e-env i r o n m ent 'C hi nese-GB)(set-d efault-f o nt "-o utl i ne-新宋体-n o r m al-r-n o r m al-n o r m al-12-*-96-96-c-*-g b2312")假如你不知道系统的字体就M-x set-default-font, 然后使用TAB 键来看一下补全的字体信息3.2.3 X Window设置X的中文设置我就不说了, 自己搞定吧, 我拷贝了Windows的simsun.ttc 和mingliu.ttc来使用, 看简繁体中文不成问题了, 设置好X的字体后, 通过配置X Resources, 来设置emacs 的字体, 通常就是配置$HOME/.Xdefaults, 1024x768的分辨率下可以设置字体为8x16, 800x600可以设置7x14的字体就可以达到字体等宽的效果e m acs.f o nt:8x16e m acs.pane Fo nt:8x16E m acs.pane.m enubar.f o nt:8x16E m acs.f o re g r o un d:whi teE m acs.bac kg r o un d: blac ke m acs.g e om etr y:100x323.3 Emacs输入法Emacs自带多种输入法, 当然不止一种语言了, 但它自带的中文输入 法实在是太......, 想必不会有谁去用它的中文输入法来输入汉字吧, 不过 还是有几种比较好的输入法像自然码等, 我从fcitx和xcin的源码包中转换出 几种输入法, 有五笔, 注音, 双拼等, 下面说一下使用方法, 可以从/projects/zhdotemacs/下载到emacsim.tar.bz2安装及使用方法, 参见安装包中的INSTALL文件1.安装输入法$tar -xv j f e m acs im.tar.b z2$c d e m acs im$cp -R g b b ig5${e m acs-i nstall-di r}/s h are/e m acs/${e m acs-vers io n}/le im2.配置输入法, 拿gb/pingyin.el为例, 把下面的代码加入到文件 ${emacs-install-dir}/share/emacs/${emacs-version}/leim/leim-list.el中(re gi ster-i nput-m et hod"c hi nese-p i n yi n-g b""C hi nese-C NS" 'q ua i l-use-pac k a g e"拼音""汉字输入∷【拼音】∷""g b/p i n yi n")3.输入法的使用, 按照上面的例子, 使用 `M-x set-input-method RET chinese-pinyin-gb RET' 就可以使用了这一部分对Emacs安装后自带的一些实用的扩展功能进行讲解4.1 auto-insert -- 自动插入功能auto-insert是一个十分有用的功能, 比如我们在写一个C语言的头文 件时, 一般会加入下面的代码#i fn d ef XXX_H#d ef i ne XXX_H#en di f /*XXX_H*/auto-insert就方便了我们, 不用每次都要手工输入这些代码, 新建 一个头文件时, 它会询问是否要加入这些自动生成的代码, 下面来看一下 auto-insert如何使用`M-x aut o-i nsert'会根据当前的mode在新建的文 件插入一些预定的文本, 如果想在打开文件时自动插入的话, 将下面的代码加入~/.emacs中(a dd-hook 'f i n d-f i le-hook s 'aut o-i nsert)修改`aut o-i nsert-al i st'可以定制插入的模板, 可以使用`d ef i nt-aut o-i nsert'来加入或者修改 `aut o-i nsert-al i st'变量`aut o-i nsert'用来定制自动插入时的动作类 型•`n i l'什么都不作, 即不执行插入动作•`t'根据auto-insert-alist和当前的mode执 行对应的插入动作•其他值 同`t', 但是自动插入文本后, 不置 文档修改标志变量`aut o-i nsert-q uer y'定义自动插入文本前是 否询问, `No n-n i l'表示自动插入文本前要询问.变量`aut o-i nsert-pr om pt'设定询问的语句, 如 果有%s, 则将被替换为执行插入的条件变量`aut o-i nsert-di rect o r y'设定模板的路径, 注意必须以`/'结尾下面是一个比价完整的配置(set q aut o-i nsert t)(set q aut o-i nsert-q uer y t)(a dd-hook 'f i n d-f i le-hook s 'aut o-i nsert)(set q aut o-i nsert-di rect o r y"~/i nsert/")(d ef i ne-aut o-i nsert '("^bu i l d\\.x m l\\'"."Ant编译脚本")"bu i l d.x m l")常见问题, auto-insert-directory的值必须以`/'结尾, 否则就不能 正常工作4.2 QuickURL -- 快速插入地址QuickURL允许我们快速的插入一个单词对应的地址, 也允许加入新的 地址, 这有点像浏览器的收藏夹, 对于经常写这些文档的我来说十分方便实 用, 同时也可以收藏一些好文章的地址.QuickURL是Emacs自带的, 所以不需要特殊的配置就可以直接使用, 常用功能如下:1.`q u i c k url-as k'在当前位置插入所选的URL2.`q u i c k url-a dd'加入新的URL3.`q u i c k url-l i st'列出所有的URL4.`q u i c k url-e di t'编辑所有的URLQuickURL还有一些其他的指令, 自己看看帮助吧, 希望它能对你有用4.3 time-stamp -- 记录修改时间打开time-stamp可以记录最后运行time-stamp的时间, 所以一般将 time-stamp 加入 write-file-hooks 中, 记录文件的最后修改时间, ~/.emacs 配置如下:(a dd-hook 'w r i te-f i le-hook s 't im e-sta m p)(set q t im e-sta m p-f o r m at "%:u %02m/%02d/%04y%02H:%02M:%02S")上面设置写入文件时执行time-stamp, 并设置时间格式为"%:u %02m/%02d/%04y%02H:%02M:%02S", 缺省的情况下, 在所编辑文件的前八行内插入如下标记T im e-sta m p: <>或者T im e-sta m p:""Emacs在保存时就会运行write-file-hooks中的time-stamp, 从而加 入修改时间, 结果类似下面所示T im e-sta m p: <j err y12/17/200312:00:54(un id evel.c om)>或者T im e-sta m p:"j err y12/17/200312:00:54(un id evel.c om)"要使用中文表示, 可以这样设置(set q t im e-sta m p-start "最后更新时间:[]+\\\\?")(set q t im e-sta m p-en d:"\n")(set q t im e-sta m p-f o r m at:"%:y年%:m月%:d日")上面设置了如果碰到"最后更新时间:"的字样, time-stamp就将其后 面的字符替换为当前时间的"XXXX年XX月XX日", 注意, time-stamp-end的结束符 为换行符, 所以"最后更新时间:"行后所有字符都将无条件被替换为"XXXX年XX月XX日" 格式的时间, 本文首页上的更新时间就是这样做出来的4.4 我最最讨厌的1.不要打入 TAB 时总是听到 PC 喇叭嘀嘀嘀的叫(set q v i s i ble-bell t)2.不要总是没完没了的问yes or no, 为什么不能用 y/n(fset 'y es-o r-n o-p 'y-o r-n-p)3.为什么不能显示个时间什么的(di spla y-t im e)4.为什么不显示当前所在的行号和列号(c o lu m n-nu m ber-mod e t)5.为什么不能像Windows下编辑器那样, 高亮显示要拷贝的区域(trans i ent-m ar k-mod e t)6.我要显示匹配的括号(s how-paren-mod e t)7.为什么使用语法显示的大文件在移动时如此之慢(set q la zy-l o c k-d efer-o n-scr o ll i n g t)(set q f o nt-l o c k-supp o rt-mod e 'la zy-l o c k-mod e)(set q f o nt-l o c k-m ax im u m-d ec o rat io n t)8.不要那个如此大的工具条(t oo l-bar-mod e -1)9.在mozilla, openoffice等拷贝的中文文字无法正确粘贴在Emacs中(Emacs 21.3 发布版有此问题, 至少在我的FreeBSD下是这样的)(set-cl i pb o ar d-c odi n g-s y ste m 'ctext)10.启动Emacs报错, ~/.emacs中有问题, 如何忽略错误(c o n di t io n-case err(pr og n(re q u i re 'xxx))(err o r(m essa g e "Can't l o a d xxx-mod e %s"(c d r err))))如上所示, 可以截获progn内部出错, 在mini-buffer下打出错误信息11.不要生成临时文件(set q-d efault m a k e-bac k up-f i les n i l)Emacs的扩展包可谓无所不有, 我只把关于开发的一些常用工具的安装 和配置及问题写一下5.1 Tramp -- Transparent Remote Access, Multiple Protocol5.1.1 tramp简介tramp提供给我们的是可以使用Emacs对本地/远程的文件进行编辑, 保存, 版本管理等, tramp的功能十分强大, 它可以使用多种协议(telnet, ftp, ssh等)进行文件的获取和保存, 也可以使用这些协议的组合来编辑和保存文件, 对本地文件的一个比较方便的操作是su, 即使用其他用户编辑只有这些用户才有权限进行编辑的文件. 例如以普通用户jerry运行Emacs 对只有root可以编辑的/etc/inetd.conf进行编辑和保存, 免去了再开一个shell以root登陆编辑的步骤5.1.2 Tramp原理Tramp的原理是使用标准的协议ftp, rsync, smb等直接获取和保存文件, 使用ssh, telnet, rsh等加上uuencode, uudecode等一些编码解码程序对文件进行 获取和保存5.1.3 tramp的安装及使用我使用的是tramp-2.0.33, 它加入了对smb支持(暂时还不是很完善, 如编辑一些中文名称的文件), 及对ftp的改进. 安装过程如下:1.下载 tramp-2.0.33.tar.gz2.假设安装到/tmp/tramp目录下, 解包tramp到/tmp/tramp下$tar -xv z f tra m p-2.0.33.tar.gz$m v tra m p-2.0.33/t m p/tra m p3.编译tramp$./c o nf ig ure --wi t h-e m acs$gm a k e4.安装tramp, 在~/.emacs中加入下面的代码(a dd-t o-l i st 'l o a d-pat h"/t m p/tra m p/l i sp")(set q tra m p-d efault-m et hod"scp")(set q tra m p-aut o-save-di rect o r y"/t m p")(set q aut o-save-f i le-na m e-transf o r m s'(("\\`/[^/]*:\\(.+/\\)*\\(.*\\)""/t m p/\\2")))(set q tra m p-c h un k s iz e 328)(re q u i re 'an g e-ftp)(re q u i re 'tra m p)5.重新启动Emacs或使用C-x C-e顺序执行上述代码就可以了5.1.4 常见问题tramp在一些版本的Emacs上会出现读出正常, 保存就无响应的现象, 设置tramp-chunksize为小于500的整数就可以了, 因为一些版本的Emacs中 process-send-string按照文档记载最长只能为500.此外tramp和ange-ftp有些冲突, 因为ange-ftp使用autoload装入, ange-ftp会设置 file-name-handler-alist变量, 从而将tramp设置的值覆盖掉, 因此使用 (require 'ange-ftp)首先装入ange-ftp, 然后使用(require 'tramp)装入tramp, 就不会出现这种问题.上述配置在windows平台上不能使Emacs正常使用tramp. Windows上推荐 使用tramp+putty, 相关配置可以使用Google查到.5.2 session5.2.1 session简介session扩展包可以使Emacs保存每次编辑的一些历史记录, 这样, 在下次打开Emacs时就可以使用上下键在以前输入的信息中选取, 十分方便实用.5.2.2 session的使用session的使用十分简单, 只需要在~/.emacs中加入如下几句就可 以了:(a dd-t o-l i st 'l o a d-pat h"<pat h t o sess io n>")(re q u i re 'sess io n)(a dd-hook 'after-i n i t-hook 'sess io n-i n i t i al iz e)5.3 Emacs mew -- 强大的Emacs Email客户端Emacs mew是一个由日本人编写的Emacs邮件客户端, 对中文支持非常 之好也是我选择它的原因. 废话少说, 开始----5.3.1 Emacs Mew的安装Emacs mew的最新版本和源代码可以从 上下 载, 下载后解压, 使用make进行编译安装, 路径可以修改一下Makefile 中的prefix, elispdir和etcdir, 注意${prefix}/bin必须在PATH变量 中, 没有的话作个符号链接也可以, 对于NTEmacs的用户, 要把下载mew 安装包中的几个exe文件拷贝到emacs安装目录的bin下.5.3.2 Emacs mew配置把下面的代码加入~/.emacs中, 把用户名, 主机名换成对应的就可 以了(aut o l o a d 'm e w"m e w" n i l t)(aut o l o a d 'm e w-sen d"m e w" n i l t)(i f (b o un d p 'rea d-m a i l-c omm an d)(set q rea d-m a i l-c omm an d 'm e w))(aut o l o a d 'm e w-user-a g ent-c om p o se "m e w" n i l t)(i f (b o un d p 'm a i l-user-a g ent)(set q m a i l-user-a g ent 'm e w-user-a g ent))(i f (fb o un d p 'd ef i ne-m a i l-user-a g ent)(d ef i ne-m a i l-user-a g ent'm e w-user-a g ent'm e w-user-a g ent-c om p o se'm e w-d raft-sen d-m essa g e'm e w-d raft-ki ll'm e w-sen d-hook))(set q m e w-p o p-s iz e 0)(set q m e w-s m tp-aut h-l i st n i l)(set q t oo lbar-m a i l-rea d er 'Me w)(set-d efault 'm e w-d ec od e-q u o te d 't)(set q m e w-pr og-p g p "g p g")(set q m e w-na m e "显示的用户名")(set q m e w-user "用户名")(set q m e w-s m tp-user "用户名")(set q m e w-m a i l-dom a i n "主机的域名")(set q m e w-s m tp-aut h-l i st n i l)(set q m e w-s m tp-server "S MT P主机")(set q m e w-p o p-server "POP主机")(set q m e w-p o p-user "用户名")(set q m e w-p o p-aut h 'pass);;认证方式(set q m e w-use-cac h e d-pass wd t)(set q m e w-nntp-server "NN T P服务器")(set q m e w-i c o n-di rect o r y(expan d-f i le-na m e "m e w/etc"d ts i te-di r))(wh en (b o un d p 'utf-translate-c jk)(set q utf-translate-c jk t)(cust om-set-var i ables'(utf-translate-c jk t)))(i f (fb o un d p 'utf-translate-c jk-mod e)(utf-translate-c jk-mod e 1))(re q u i re 'fl y spell);;非常好用的英文的拼写检查5.3.3 常见问题•无法从网上下载所有邮件,总是报告类似"no new messages (3 messages left)"的消息删除Mail/.mew-uidl文件使Mew将邮件认为新邮件,设置(setq mew-pop-size 0)使mew下载所有邮件,不论大小, 注意首先要使 用'Q'退出new ( 'Q' is 'shift' + 'q', not just 'q'), 保证mew重新加载~/Mail/.mew-uidl•如何在mew将邮件地址加入地址簿?C-cC-a加入地址簿, C-uC-cC-a加入地址和用户信息, 在发送邮件时可以使用TAB补全, 使用M-TAB将地址转换为User<address>的样子•无法发送和接收邮件在mew的分发包中一般包含mewls, mewl, mewencode, mewdecode, incm等可执行文件, 检查它们所在路径是否包含在环境变量PATH中, 或者拷贝这些文件到emacs安装目录的bin目录下•设置多个邮件mew提供多邮件设置, 这是通过设置mew-config-alist变量完成的, 例如我的邮箱设置 (可以设置在~/.emacs或者~/.mew.el中)(set q m e w-c o nf ig-al i st'(("y a hoo"("na m e"."J err y")("user"."my na m e")("s m tp-server"."127.0.0.1")("s m tp-p o rt"."5059")("p o p-server"."127.0.0.1")("p o p-p o rt"."5058")("s m tp-user"."my na m e")("p o p-user"."my na m e")("m a i l-dom a i n"."n o nex i st.c om")("m a i lb o x-t y pe". p o p)("p o p-aut h". pass)("s m tp-aut h-l i st".("P L A IN""L O GIN""C R AM-M D5")))("d efault"("na m e"."J err y")("user"."sa m ple")("s m tp-server"."127.0.0.1")("s m tp-p o rt"."25")("p o p-server"."127.0.0.1")("p o p-p o rt"."110")("s m tp-user"."sa m ple")("p o p-user"."sa m ple")("m a i l-dom a i n"."sa m ")("m a i lb o x-t y pe". p o p)("p o p-aut h". pass)("s m tp-aut h-l i st".("P L A IN""L O GIN""C R AM-M D5")))))设置好后, 可以通过在summary列表下输入`C'切换设置, 不过需要注意 "mailbox-type"和"pop-auth"设置的值是没有引号的5.3.4 一些mew的屏幕截图mew屏幕截图1mew屏幕截图25.4 Color Theme -- 让你的Emacs更多彩这个扩展包与开发工具没有多大关系, 不过还是有一点点的, 至少可 以帮助htmlize生成的html有不同的背景, 它主要是为Emacs配置不同的色彩搭配, 使之像Windows那样据有不同的色彩主题, 例如某些变变总是把各种IDE的编辑器设置的像是控制台下的VI一样黑底白字.5.4.1 color-theme的安装想不起来在哪里下载的了, 用Google搜索一下吧, 安装起来比较简单, 就是将安装目录加入load-path, 调入color-theme, 需要的话再选择一个缺 省的theme就可以了, 例如将color-theme.el放在/tmp下, 则配置如下:(a dd-t o-l i st 'l o a d-pat h"/t m p")(re q u i re 'c o l o r-t h e m e)(c o l o r-t h e m e-d ar k-blue)5.4.2 color-theme的使用安装完后, Tools菜单下会有一个Color Theme的菜单项, 可以用这 个定制color-theme, color-theme自带有不少的颜色主题有很多的Emacs lisp, 非常小巧而实用, 下面就介绍一些我常用的6.1 tab-display.eltab-display.el是用来以'<'字符标识出文件中的那些tab字符, 对于编辑某些文件来说非常有用, 它清楚地标明那些字符是tab的字符点击这里下载tab-display.el使用十分简单, 只需要在~/.emacs中加入(require 'tab-display)就可以了, 当然首先你要作的是把tab-display.el所在的路径加入load-path中tab-display屏幕截图6.2 wb-line-number.elwb-line-number.el可以在窗口左侧分割出一个显示行号的小窗口, 比那个mode-line上的行号看的更清楚一些点击这里下载wb-line-number.el使用时在~/.emacs中加入下面的语句(不要总是要我提醒你注意load-path设置哦)(set-scr o ll-bar-mod e n i l); n o scr o ll bar, even i n x-wi n dow s y ste m(re q u i re 'w b-l i ne-nu m ber)在需要显示行号的buffer打入M-x wb-line-number-toggle就可以了, 或者像我这样在~/.emacs中再加入一句(wb-line-number-enable)缺省显示行号wb-line-number屏幕截图6.3 keisen-modekeisen-mode是一个用来绘制表格的好工具, 尤其是绘制中文表格, 比起那个table.el来说好多了, kersen-mode是小日本写的, 点击这里下载 keisen-mule.lzh, 文件使用lha压缩, 使用时在~/.emacs中加入下面的语句(i f wi n dow-s y ste m(aut o l o a d 'k e i sen-mod e "k e i sen-mo use""M UL E table" t)(aut o l o a d 'k e i sen-mod e "k e i sen-m ule""M UL E table" t))操作起来只要使用Emacs中的移动键或者鼠标移动, 就可以绘制出各种表格了, 它会自动计算各个连接点, 简单方便keisen-mode屏幕截图Chapter 7 自己写的一些Emacs lispJerry1.Emacs MPG123歌词同步显示 -- lrc.el, 点击下载, 可以显示大部分lrc格式的歌词,还有一些BUG, 导致某些的歌词无法显示, 正在修改中安装说明: 替换掉mpg123.el, 删去原来的mpg123.el,mpg123.elc, 在~/.emacs中加入下面的代码就可以了(set q lrc-l y r i c-di r "lrc文件的路径") t o~/.e m acs(re q u i re 'm p g123)歌词显示在minibuffer中, 点击看大图以前的一些这里下载8.1 Emacs中的游戏Emacs自带了一些小游戏, 介绍几个1.M-x tetris俄罗斯方块2.M-x gomoku五子棋游戏3.M-x mpuz填数字游戏4.M-x snake贪吃蛇游戏5.M-x zone一个Emacs的屏保, 因为抓不出动的效果, 所以还是自己体验吧, 我第一次用它时把同事吓了一跳, 被误认作病毒6.M-x dunnet一个Mud游戏, 比较难玩, 推荐英文比较好的一定玩一下7.M-x nethack这个可不是Emacs自带的, 给那些nethack的faners, 需要下载nethack.el, 自己搜一下吧, 不过记得要重新编译nethack来支持Emacs剩下的那些不是我不会玩就是不好玩, 故不浪费时间介绍了, 自己体会吧Chapter 9 迷你型的EmacsJerry网上有一些类似Emacs的编辑程序, 十分小巧, 比较著名的有下面几个1.em, 下载地址http://www3.famille.ne.jp/~ncc1701/em/2.zile 下载地址/projects/zile/3.qemacs 下载地址http://fabrice.bellard.free.fr/qemacs/当你的机器无法忍受庞大的Emacs时, 不妨试试这些小巧的编辑器, 我在一台PII266/64M RAM 的笔记本上就使用zile来进行开发9.1 zile 中文设置zile安装完毕后需要修改缺省的配置来显示中文, 一般就是在$HOME/.zilerc中加入或者修改displayable-characters, 修改成下面的样子di spla y able-c h aracters ="0x20-0xff"10.1 中文资源1. 我在yahoo groups上申请了邮件列表, 希望大家可以参与讨论1.参与讨论:zhdotemacs@[1]2.订阅:zhdotemacs-subscribe@[2]3.退订:zhdotemacs-unsubscribe@[3]此外, 可以通过/group/zhdotemacs/来查看以往信件, 不过必须注册一个yahoo帐号.Notes[1]首先需要订阅, 订阅后可以向zhdotemacs@ 发送邮件参与讨论[2]订阅时向zhdotemacs-subscribe@ 发送一封邮件, 主题上写"subscribe"就可以了, 注意不要加上引号, 收到确认信后, 按照内容中所说的回复或点击对应链接就可以了[3]退订时向zhdotemacs-unsubscribe@ 发送一封邮件, 主题上写"unsubscribe"就可以了, 注意不要加上引号, 收到确认信后, 按照内容中所说的回复或点击对应链接就可以了10.2 Lisp资源•Emacs Lisp List--- Emacs Lisp大全•Mule-GBK--- Emacs的GBK编码10.3 文档资源•Emacs 快速指南 (官方 ) --- 官方的快速指南•Emacs wiki中文版•王春宇的Emacs中文资料--- emacs和gnus的配置资料和一些非常有用的参考资料•王垠的Emacs资料--- 一些Emacs的配置和使用技巧•Emacs/Cygwin配置资料--- NTEmacs与Cygwin环境的整合, 推荐NTEmacs的用户看一下•Emacs wiki -- 大量的Emacs资源•Emacs dotfiles -- 大量的.emacs的配置样。

Emacs快捷键的总结

Emacs快捷键的总结

Emacs快捷键的总结文件操作C-x C-f 打开文件,出现提示时输入/username@host:filepath可编辑FTP文件C-x C-v 打开一个文件,取代当前缓冲区C-x C-s 保存文件C-x C-w 存为新文件C-x i 插入文件C-x C-q 切换为只读或者读写模式C-x C-c 退出Emacs编辑操作C-f 前进一个字符C-b 后退一个字符M-f 前进一个字M-b 后退一个字C-a 移到行首C-e 移到行尾M-a 移到句首M-e 移到句尾C-p 后退一行C-n 前进一行M-x goto-line 跳到指定行C-v 向下翻页M-v 向上翻页M-< 缓冲区头部M-> 缓冲区尾部C-M-f 向前匹配括号C-M-b 向后匹配括号C-l 当前行居中M-n or C-u n 重复操作随后的命令n次C-u 重复操作随后的命令4次C-u C-u 重复操作随后的命令8次C-x ESC ESC 执行历史命令记录,M-p选择上一条命令,M-n选择下一条命令C-d 删除一个字符M-d 删除一个字C-k 删除一行M-k 删除一句C-w 删除标记区域C-y 粘贴删除的内容注意:C-y可以粘贴连续C-k删除的内容;先按C-y,然后按M-y可以选择粘贴被删除的内容C-@ 标记开始区域C-x h 标记所有文字C-x C-x 交换光标位置和区域标记区开头M-w 复制标记区域C-_ or C-x u 撤消操作执行SHELL命令M-x shell 打开SHELLM-! 执行SHELL命令(shell-command)M-1 M-! 执行SHELL命令,命令输出插入光标位置,不打开新输出窗口M-| 针对某一特定区域执行命令(shell-command-on-region), 比如C-x h M-|uuencode窗口操作C-x 0 关闭本窗口C-x 1 只留下一个窗口C-x 2 垂直均分窗口C-x 3 水平均分窗口C-x o 切换到别的窗口C-x s 保存所有窗口的缓冲C-x b 选择当前窗口的缓冲区C-x ^ 纵向扩大窗口C-x } 横向扩大窗口缓冲区列表操作C-x C-b 打开缓冲区列表d or k 标记为删除~ 标记为未修改状态% 标记为只读s 保存缓冲u 取消标记x 执行标记的操作f 在当前窗口打开该缓冲区o 在其他窗口打开该缓冲区目录操作C-x d 打开目录模式s 按日期/文件名排序显示v 阅读光标所在的文件q 退出阅读的文件d 标记为删除x 执行标记D 马上删除当前文件C 拷贝当前文件R 重名名当前文件+ 新建文件夹Z 压缩文件! 对光标所在的文件执行SHELL命令g 刷新显示i 在当前缓冲区的末尾插入子目录的内容[n]m 标记光标所在的文件,如果指定n,则从光标所在的文件起后n个文件被标记[n]u 取消当前光标标记的文件,n的含义同上t 反向标记文件%-m 正则标记q 退出目录模式说明:在目录模式中,如果输入!,在命令行中包含*或者?,有特殊的含义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(defun my-insert (num1 num2 prefix)
(let ((@ num1))
(save-restriction
(while (< @ num2)
(insert (format prefix @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @))
// Inputs
.i (i));
endmodule
4 模板 /*AUTO_TEMPLATE*/,注意下面的@,和例化的序号(如下面的ms2中的2)是一致的
/* psm_mas AUTO_TEMPLATE (
.PTL_MAPVALIDX (PTL_MAPVALID[@]),
.PTL_BUS (PTL_BUSNEW[]),
); */
psm_mas ms2 (/*AUTOINST*/);
/* psm_mas AUTO_TEMPLATE (
output o;
endmodule
3 自动例化 /*AUTOINST*/
module fanout (o,i)
input i;
output [31:0] o;
wire [31:0] o = {32{i}};
endmodule
module ex_inst (o,i)
介绍verilog-mode的一个ppt:/papers/verilog-mode_veritedium_20090925.pdf。它的官方网站:/wiki/verilog-mode(应该是吧,没仔细考证)
6 插入lisp语句 /*AUTOINSERTLISP*/,比如 /*AUTOINSERTLISP(my-insert 0 22 "my_init(\"c:\\\\my_src\\\\my_src%d\");\n")*/ /*AUTOINSERTLISP(my-insert 0 22 "my_init(\"c:\\\\my_src\\\\my_src%d\");\n")*/
my_init("c:\\my_src\\my_src7");
my_init("c:\\my_src\\my_src8");
my_init("c:\\my_src\\my_src9");
my_init("c:\\my_src\\my_src10");
其实还漏了一些,比如/*AUTOWIRE*/,他会把例化模块的输出中,没有声明wire的自动声明;/*AUTORESET*/,自动把寄存器初始化写好;/*AUTOREG*/,如果输出中不应该是wire型,自己又没写reg,这个就自动生成了。
总之很推荐!不过vimer可能就不太爽了,Verilog-mode的网站上虽然有个解决方法,但是其实很不好用,原文是这样:
my_init("c:\\my_src\\my_src15");
my_init("c:\\my_src\\my_src16");
my_init("c:\\my_src\\my_src17");
my_init("c:\\my_src\\my_src18");
my_init("c:\\my_src\\my_src19");
my_init("c:\\my_src\\my_src20");
my_init("c:\\my_src\\my_src21");
// End of automatics
如果要例化很多模块,或者写很多my_reg_0、my_reg_1……什么的,方便很多很多。上面的例子是做仿真时候指定test vector源文件的,就是现在正在跑的,也很方便。其中my-insert是自己写的一个简陋的elisp函数:
my_init("c:\\my_src\\my_src11");
my_init("c:\\my_src\\my_src12");
my_init("c:\\my_src\\my_src13");
my_init("c:\\my_src\\my_src14");
input i;
output [31:0] o;
fanout fanout (/*AUTOINST*/);
endmodule
module fanout (o,i)
input i;
output [31:0] o;
wire [31:0] o = {32{i}};
.PTL_MAPVALIDX (PTL_MAPVALID[@]),
.PTL_BUS (PTL_BUSNEW[]),
); */
psm_mas ms2 (/*AUTOINST*/
// Outputs
end
2 自动生成端口 /*AUTOARG*/
module ex_arg (/*AUTOARG*/);
input i;
output o;
endmodule module ex_arg (/*AUTOARG*/
// Outputs
o,
// Inputs
i);
input i;
.INSTDATAOUT (INSTDATAOUT),
.PTL_MAPVALIDX (PTL_MAPVALID[2]), // Templated
.PTL_BUS (PTL_BUSNEW[3:0]), // Templated
5 lisp模板 /*AUTO_TEMPLATE*/,注意下面的@,后面可以跟一些lisp代码,比如上面的例子,ms2的PTL_MAPVALIDX 不是接(PTL_MAPVALID[2]),而是(PTL_MAPVALID[2+1]),那前面写成这样就行了((+ 1 @)是elisp的1+@):
endmodule
module ex_inst (o,i)
output o;
input i;
fanout fanout (/*AUTOINST*/
// Outputs
.o (o[31:0]),
emacs --batch filename.v -f verilog-auto -f save-buffer
(setq @ (1+ @))))))
elisp高手不要笑话我啊……不知道写成AUTO_TEMPLATE的那个样子需要怎么写……
总结一下,用verilog-mode基本上只需要写真正需要的,而那些由于verilog的语法什么的规则导致的重复劳动都可以省下了。还有一个好处,自动生成的这些C-c k就没有了,也就是说那1000行的代码就被缩减到100行,维护起来方便很多。还有一些快捷键,写module、always、case之类的只用写名字、条件之类的就行了,像begin、end、endmodule、endcase、case之类的也都是自动生成的。
// Beginning of automatic insert lisp
my_init("c:\\my_src\\my_src0");
my_init("c:\\my_src\Байду номын сангаасmy_src1");
my_init("c:\\my_src\\my_src2");
verilog-mode大概有这么几个作用吧(代码摘自/projects/verilog-mode/wiki/Verilog-mode_veritedium):
注意:左边是需要写的,右边是C-c a自动生成的。
1 自动生成组合逻辑敏感列表 /*AUTOSENSE*/
/* psm_mas AUTO_TEMPLATE (
.PTL_MAPVALIDX (PTL_MAPVALID[@“(+ 1 @)"]),
.PTL_BUS (PTL_BUSNEW[]),
); */
这个功能相当强大,比如例化很多相同的模块的时候,连接关系通常会有规律,那么按照这个规律写elisp就可以了。
For those that use vi, or have a script generating code, it is useful to be able to expand the automatics from the shell. Batch invocation is done with the shell command:
my_init("c:\\my_src\\my_src3");
my_init("c:\\my_src\\my_src4");
my_init("c:\\my_src\\my_src5");
my_init("c:\\my_src\\my_src6");
always @ (/*AUTOSENSE*/) begin
outin = ina | inb;
out = outin;
end always @ (/*AUTOSENSE*/ina or inb) begin
outin = ina | inb;
out = outin;
电脑跑仿真,还得挺长时间的,顺便把用emacs写verilog的方便之处大概总结一下吧,我只能说:太方便了!
以前用verilog-mode也就用个/*AUTOARG*/、/*AUTOWIRE*/、/*AUTOSENSE*/、/*AUTOINST*/之类的,写个小工程基本也足够了。后来开始用/* AUTO_TEMPLATE*/、/*AUTOINSERTLISP*/,发现这个大大提高工作效率:有一个1000行左右的verilog模块(主要是例化了很多其他模块),用verilog-mode只写了100行,然后等着自动生成就行了。虽说也可以copy-paste,然后再改改,不用真写1000行,但这个工作量也不小,也有容易出错。
相关文档
最新文档