??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一级久久久久久久大片,国内精品免费久久影院,天天影视色香欲综合久久http://www.shnenglu.com/DrMagic/zh-cnThu, 08 May 2025 19:52:38 GMTThu, 08 May 2025 19:52:38 GMT60Vim 参考指?/title><link>http://www.shnenglu.com/DrMagic/archive/2007/11/23/37195.html</link><dc:creator>Dr.Magic</dc:creator><author>Dr.Magic</author><pubDate>Fri, 23 Nov 2007 03:37:00 GMT</pubDate><guid>http://www.shnenglu.com/DrMagic/archive/2007/11/23/37195.html</guid><wfw:comment>http://www.shnenglu.com/DrMagic/comments/37195.html</wfw:comment><comments>http://www.shnenglu.com/DrMagic/archive/2007/11/23/37195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/DrMagic/comments/commentRss/37195.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/DrMagic/services/trackbacks/37195.html</trackback:ping><description><![CDATA[     摘要: *quickref.txt*    For Vim version 7.1.  最q更? 2007q??nbsp;         VIM REFERENCE MANUAL    by Bram Moolenaar     &...  <a href='http://www.shnenglu.com/DrMagic/archive/2007/11/23/37195.html'>阅读全文</a><img src ="http://www.shnenglu.com/DrMagic/aggbug/37195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/DrMagic/" target="_blank">Dr.Magic</a> 2007-11-23 11:37 <a href="http://www.shnenglu.com/DrMagic/archive/2007/11/23/37195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Emacs 快速指?/title><link>http://www.shnenglu.com/DrMagic/archive/2007/11/22/37149.html</link><dc:creator>Dr.Magic</dc:creator><author>Dr.Magic</author><pubDate>Thu, 22 Nov 2007 09:53:00 GMT</pubDate><guid>http://www.shnenglu.com/DrMagic/archive/2007/11/22/37149.html</guid><wfw:comment>http://www.shnenglu.com/DrMagic/comments/37149.html</wfw:comment><comments>http://www.shnenglu.com/DrMagic/archive/2007/11/22/37149.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/DrMagic/comments/commentRss/37149.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/DrMagic/services/trackbacks/37149.html</trackback:ping><description><![CDATA[Emacs 快速指?Q查看版权声明请x文末)<br><br>【注意:位于【】之间的内容是译注,比如本行Q下同。?br><br>Emacs 键盘命o通常包含 CONTROL 键(有时候以 CTRL ?CTL 来标C)?br>META 键(有时候用 EDIT ?ALT 来标C)。ؓ了避免每ơ都要写出全名,我们<br>U定使用下述~写Q?br><br> C-<chr>  表示当输入字W?<chr> 时按?CONTROL 键?br>          因此 C-f pC:按住 CONTROL 键再输入 f?br><br> M-<chr>  表示当输入字W?<chr> 时按?METAQ或 EDIT ?ALTQ键?br>          如果你的键盘上没?META 、EDIT ?ALT 键,用下q方法也{效Q?br>          先按一?ESC 键然后放开Q再输入 <chr>。我们用 <ESC> 来表C?br>          ESC 键?br><br>重要提示Q要退?EmacsQ请?C-x C-cQ两个连l的l合键)。下文中左边?br>行的“>>”字样用来提示你尝试键盘命令。比如:<br><br><br><br><br><br><br><br>>> 现在输入 C-v Q查看下一屏文字)UdC一屏?br>   Q别紧张Q在输入字符 v 的同时注意要按住 CONTROL 键)<br>   从现在开始,每读完当前一屏你都需要这样做一ơ?br><br>值得注意的是Q当你从上一屏滚C一屏时Q中间会有两行的重复Q这样做是ؓ<br>了维持滚屏的q箋性,方便你顺畅、连l地阅读?br><br>用编辑器Q开门第一件事是学会在文字中Ud。你已经知道?C-v 可以向下U?br>动一屏,要往上移Q请?M-v Q也是按住 META 键,然后输入vQ如果你没有<br>META、EDIT ?ALT 键那么就先按 <ESC> 再按 vQ?br><br>>>  试试 M-vQ然后再试试 C-vQ来回遛几次?br><br><br>* 结QSUMMARYQ?br>-----------------<br><br>以下命o在翻|览时相当有用Q?br><br>        C-v     向前Ud一?br>        M-v     向后Ud一?br>        C-l     重绘屏幕Qƈ光标所在行|于屏幕的中?br>                Q注意是 CONTROL-LQ不?CONTROL-1Q?br><br>>> 扑ֈ光标Q留意其附近的文字,然后输入 C-l?br>   找找光标在哪里,你会发现光q的文字q没有变化?br><br>如果你的键盘上有 PageUp ?PageDnQ也可以用这两个键来滚屏。不q?br>C-v ?M-v 的效率要更高一些?br><br><br>* 基本的光标控ӞBASIC CURSOR CONTROLQ?br>----------------------------------------<br><br>整屏的移动很有用Q但是如何在文字中精定位呢Q?br><br>有几U方式可以选择。用方向键当然可以,不过更有效率的方法是保持双手位于<br>主键盘区Q然后?C-p ?C-b ?C-f ?C-n q四个命令。它们的功能和方<br>向键是一LQ如下图所C:<br><br>                             上一?C-p<br>                           n       :<br>                                  :<br>            向左U?C-b .... 目前光标位置 .... 向右U?C-f<br>                                  :<br>                                  :<br>                             下一?C-n<br>n<br>>> ?C-n ?C-p 光标移C囄中央?br>   ?C-lQ整q图会被昄在屏q的中央?br><br>“P N B F”四个字母分别代表了四个词Q用q四个词记忆q些l合键会更容易:<br>P 代表 previousQ上一行)QN 代表 nextQ下一行)QB 代表 backwardQ回<br>退Q,?F 则代?forwardQ前q)。这些组合键今后与你Ş׃R?br><br>>> 按几?C-n 把光标往下挪到这里?br><br>>> ?C-f 把光标移动到q一行,然后再用 C-p 往上挪?br>   注意观察当光标在一行的中央?C-p 命o的行为?br><br>每行文字都以一?#8220;换行W?#8221;l束Q?#8220;换行W?#8221;把行与行区分开来。文件的最?br>一行也应该也有一个换行符Q不q?Emacs q不强制要求q一点)?br><br>>> 在一行的行头输入 C-b?br>   光标应该会移动到前一行的行尾Q因为光标在回退q程中越q了换行W?br><br>同样 C-f 也可以像 C-b 一栯q换行符?br><br>>> q按几次 C-bQ感受一下光标的Ud?br>   然后按几?C-f 回到本行的行?br>   再按一?C-fQ光标会UdC一行?br><br>当你Ud光标I越屏幕的上下边界时Q在边界外的文字会移动到屏幕内,q称?br>“滚动”QscrollingQ。滚动得光标可以被Ud到文字中的Q何位|,q且q?br>不会让光标跑到屏q外边去?br><br>>> ?C-n 光标下U,一直越q屏q边界,同时观察发生了什么变化?br><br>如果你嫌一个字W一个字W地挪光标太慢,你还可以一个词一个词地蟩。M-f<br>(META-f) 可以光标往前移动一个词Q?M-b 则是往后移。【这里的“?#8221;?br>英文单词Q对中文来说Q则是指UdC一个标点符受?br><br>>> 试试 M-f ?M-b?br><br>如果光标停在一个词的中_M-f 会移动到q个词的末尾。如果光标处于词与词<br>之间的空白处QM-f 会移动到下一个词的末。M-b 的功能类|只是方向相反?br><br>>> 按几?M-f ?M-bQ中间夹杂一?C-f ?C-b?br>   你可以观察到 M-f ?M-b 在不同位|上所表现出来的不同行为?br><br>h?C-f 、C-b ?M-f 、M-b 两对之间的类比关pR通常的惯例是QMETA p?br>列组合键用来操作“pa定义的单位(比如词、句子、段落)”Q?CONTROL<br>pdl合键用来操?#8220;与语a无关的基本单位(比如字符、行{等Q?#8221;?br><br>cM的惯例在“?#8221;?#8220;句子”之间也同样适用QC-a ?C-e 可以光标移动到<br>“一?#8221;的头部和NQ?M-a ?M-e 则将光标Ud?#8220;一?#8221;的头部和N?br><br>>> 按两?C-aQ再按两?C-e?<br>   按两?M-aQ再按两?M-e?br><br>想一想ؓ什么重复的 C-a 命o会没有作用,而重复的 M-a 命o则会让光标不?br>地回退C一个句子。虽然这个类比规律ƈ不严|但是很自然?br><br>光标停留的位|也可以UC“点位”QpointQ。或者干脆说Q光标指C出了屏q?br>?#8220;点位”在文本中的位|?br><br>q里对简单的光标Ud命o做一个ȝQ其中也包括了整词和整句的移动:<br><br>        C-f     向右Ud一个字W?br>        C-b     向左Ud一个字W?br><br>        M-f     向右Ud一个词【对中文是移动到下一个标点符受?br>        M-b     向左Ud一个词【对中文是移动到上一个标点符受?br><br>        C-n     UdC一?br>        C-p     UdC一?br><br>        C-a     Ud到行?br>        C-e     Ud到行?br><br>        M-a     Ud到句?br>        M-e     Ud到句?br><br>>> 把上面所有的命o都练习几ơ,q些可都是最常用的命令?br><br>q里q要介绍两个重要的光标移动命令:M-< QMETA 于P可以光标移动到<br>所有文字的最开_M-> QMETA 大于P可以光标移动到所有文字的最末尾?br><br>注意Q在大部分键盘上Q小于号Q?lt;Q需要用上档键(ShiftQ来输入Q所以在q?br>些键盘上你应该用 Shift 键来输入 M-<Q如果不?Shift 键,你输入的会是<br>M-commaQMETA 逗号Q?br><br>>> 试一?M-< Q移到本快速指南的最开始?br>   然后再按几次 C-v 回到q里?br><br>>> 试一?M-> Q移到本快速指南的最末尾?br>   然后再按几次 M-v 回到q里?br><br>如果你的键盘上有方向键的话,也可以用它们来移动光标。不q我们有三个理由<br>推荐你学?C-b 、C-f 、C-n 、和 C-pQ(1Q它们在M键盘上都能用。(2Q?br>当你熟练使用 Emacs 之后Q你会发现用q些l合键比用方向键要快得多Q因Z<br>的手不需要离开打字区。(3Q一旦你习惯了用这些组合键Q你也可以很Ҏ?br>适应其它更高U的光标Ud命o?br><br>大部分的 Emacs 命o接受数字参数Qƈ且对于多数命令而言Q这些数字参数的?br>用是指定命o的重复次数。ؓ一个命令指定数字参敎ͼ也就是重复次敎ͼ的方?br>是:先输?C-uQ然后输入数字作为参敎ͼ最后再输入命o。如果你有META Q或<br>EDIT ?ALTQ键Q那么还有另一U办法:按住 META 键不放,然后输入数字。不<br>q我们还是徏议你?C-uQ因为它在Q何终端机上都能用。这U数字参CUCؓ<br>“前缀参数”Q意思是说这个参数是先于使用它的命o而输入的?br><br>举例来说Q?C-u 8 C-f 会向前移?8 个字W?br><br>>> ?C-n 或?C-p 指定一个数字参敎ͼq样你可以只用一个命令就把光标移?br>   到本行的附近?br><br>虽然大部分命令把数字参数解释为其重复ơ数Q但是也有些命o例外Q它们将?br>字参数另做它用。比如有些命令(我们目前q没学到Q仅仅将前缀参数作ؓ一?br>标志――只要给出有一个前~参数Q不其gؓ何,它都会改变命令的功能?br><br>?C-v ?M-v 则属于另一U类型的例外。当l定一个参数时Q它们将滚动你指<br>定的“行数”Q而不?#8220;屏数”。D例来_C-u 8 C-v 屏q向下滚?8 行,<br>而不?8 屏?br><br><br>>> 现在试试看,输入 C-u 8 C-v?br><br>q个命o应该已经文字向上滚动了 8 行。如果你惛_它再ơ地向下滚动Q你?br>以给定一个参数然后执?M-v?br><br><br>如果你正在用一个窗口系l,比如 X11 或者微软的 WindowsQ那么在 Emacs<br>H口的边~应该有一个长方Ş的区域叫“滚动?#8221;Q你可以用鼠标操U|动条?br>滚动文字?br><br>>> 试着?#8220;滚动条内的反白区?#8221;上按一下鼠标中键?br>   文字应该会滚动到鼠标所指示的位|?br><br>>> 当按住中键时Q试着鼠标上下移动?br>   你会看到文字随着鼠标的移动而上下滚动?br>   【Windows 版本W合 Windows E序的传l操作习惯,上述操作不适用。?br><br><br>* ?EMACS 失去响应的时候(WHEN EMACS IS HUNGQ?br>-----------------------------------------------<br><br>如果 Emacs 对你的命令失d应,你可以用 C-g 来安全地l止q条命o。C-g<br>也可以终止一条执行过久的命o?br><br>C-g q可以取消数字参数和只输入到一半的命o?br><br>>> 输入 C-u 100 讑֮一个gؓ 100 的数字参敎ͼ然后?C-g?br>   现在再按 C-fQ光标应该只会移动一个字W,因ؓ你已l用 C-g 取消了参数?br><br>如果你不心按了一?<ESC>Q你也可以用 C-g 来取消它?br>【这个说法似乎有问题Q因为按照这个按键顺序输入的应该?C-M-g?br>  取消 <ESC> 的正做法是再连按两?<ESC>。?br><br><br>* 被禁用的命oQDISABLED COMMANDSQ?br>-----------------------------------<br><br>有一?Emacs 命o?#8220;用”了,以避免初学者在不了解其切功能的情况下?br>用而造成ȝ?br><br>如果你用C一个被用的命令,Emacs 会显CZ个提C消息,告诉你这个命?br>到底是干什么的Q询问你是否要l,q在得到你的肯定之后再执行这命o?br><br>如果你真的想用这条命令,?Emacs 询问你的时候应该按I格。一般来_如果<br>你不想用Q就?#8220;n”?br><br>>> 试试 C-x C-l Q这是一个被用的命令)<br>   然后?n 来回{询问?br><br><br>* H格QWINDOWSQ?br>-----------------<br><br>Emacs 可以有多个窗|每个H格昄不同的文字。后面会介绍怎么对付多个H?br>|现在我们先学会如何关掉多余的H格。其实也很简单:<br><br>        C-x 1   只保留一个窗|也就是关掉其它所有窗|?br><br>也就是先?CONTROL-x 然后再按 1。C-x 1 会保留光标所在的H格Qƈ其扩大<br>到整个屏q,同时x所有其它的H格?br><br>>> 把光标移到本行然后输?C-u 0 C-l?br><br>>> 输入 CONTROL-h k CONTROL-f。观察当一个新H格出现时当前窗|用来昄<br>   CONTROL-f 命o的文档)是如何羃的?br><br>>> 输入 C-x 1 x文档H格?br><br>q个命o跟先前学q的命o不太一P因ؓ它包含了两个字符Q以 CONTROL-x 开<br>始。有一pd命o都是?CONTROL-x 开始的Q这些命令许多都?#8220;H格、文件?br>~冲区【缓冲区QbufferQ会在后文详l介l?#8221;{等诸如此类的东西有养I?br>中有些命令可能包含了 2 个? 个或?4 个字W?br><br><br>* 插入与删除(INSERTING AND DELETINGQ?br>--------------------------------------<br><br>插入文字很简单,直接敲键盘就可以了。你能看到的字符Q比?A?? {等Q?br>都被 Emacs 视ؓ文字q且可以直接插入。敲 <Return>Q回车键Q会插入一个换<br> v行符?br><br>你可以用 <Delback> 来删除最后输入的一个字W,q个跟你?Emacs 之外的用<br>法应该一栗一般来?<Delback> 是位于 <Return> 键上Ҏ处的一个大块头<br>的键Q通常被标CZؓ“Delete”?#8220;Del”或?#8220;Backspace”?br><br>如果你找C“Backspace”键,那么它应该就?<Delback>Q这时哪怕你又在?br>的地ҎC一?#8220;Del”键,那么它也应该不是 <Delback>?br><br>一U更通用的说法是Q?lt;Delback> 删除位于光标前的一个字W?br><br>>> 现在来试试――敲点字Q然后按几下 <Delback> 删除它们?br>   不用担心文g被修改,你做什么都没关p,q里是专给你练习用的?br><br>如果一行文字很ѝ超ZH格的宽度,昄不下的部分会在紧ȝ下一行l?br>昄。这时会有一个反斜线Q在控制C是反斜线Q如果你用图形窗口系l,?br>应该是一个小的转弯头Q显C在双沿,表明q是某一行的接箋昄?br><br>>> 输入文字Q一直到屏幕的右边界Q然后l,你会看到一个接l行出现?br><br>>> ?<Delback> 删掉一些文字,直到此行长度于H格宽度Q接l行消׃?br><br>换行W跟其它字符一样可以被删除。两行中间的换行W被删除后,q两行将会合<br>q成一行。如果合q后的这一行太长,出了窗格宽度,它就会以一个接l行?br>昄?br><br>>> Ud光标到某行的开头ƈ输入 <Delback>?br>   q时该行与其前一行一赯合ƈZ行?br><br>>> 输入 <Return> 重新插入你刚才删除的换行W?br><br>前面讲过Q大部分?Emacs 命o都可以指定重复次敎ͼq其中也包括输入字符?br>命o。重复执行输入字W的命o实际上就是输入多个相同的字符?br><br>>>  试试 C-u 8 *Q这会插入 ********?br><br>好,现在你应该已l掌握了最基本的的文本插入和修改功能,其实删除q可?br>“以词为单?#8221;q行Q下面是一个关?#8220;删除”操作的小l:<br><br>        <Delback>    删除光标前的一个字W?br>        C-d          删除光标后的一个字W?br><br>        M-<Delback>  U除光标前的一个词<br>        M-d          U除光标后的一个词<br><br>        C-k          U除从光标到“行尾”间的字符<br>        M-k          U除从光标到“句尾”间的字符<br><br>【可能你已经注意C“删除QdeleteQ?#8221;?#8220;U除QkillQ?#8221;的用词区别,?br>文会有详l说明。?br><br>注意“<Delback> ?C-d”q有“M-<Delback> ?M-d”是根据前q惯例从 C-f<br>?M-f 衍生出来的(其实<Delback>不是控制字符Q我们先忽略q一点)。C-k<br>?M-k 的关pd某种E度上与 C-e ?M-e 一样――如果把“一?#8221;?#8220;一?#8221;<br>作一个类比的话?br><br>你也可以用一U通用的办法来U除~冲区里的Q何一部分Q首先把光标UdC<br>惌U除的区域的一端,然后?C-@ ?C-SPCQQ一卛_QSPC指空|【注意,<br>C-SPC 往往被中文用戯定成输入法热键,如果q样QC-SPC ppȝ拦截而无<br>法传递给 Emacs 了,因此q里q是推荐使用C-@。】,然后光标移动到另一端,<br>再按 C-w 可以把位于q两点之间的所有文字移除了?br><br>>> Ud光标C一D开头的“?#8221;字?br>>> 输入 C-@ 。Emacs 应该会在屏幕的下ҎCZ?#8220;Mark set”的消息?br>>> Ud光标到第二行中的“?#8221;字?br>>> 输入 C-wQ从“?#8221;开始到“?#8221;之前的文字被全部U除?br><br>注意,“U除QkillQ?#8221;?#8220;删除QdeleteQ?#8221;的不同在于被U除的东西可以找?br>来,而被删除的就不行了。【实际上Q移除掉的东西虽然看h“消失”了,?br>实际上被 Emacs 记录了下来,因此q可以找回来Q而删除掉的东西虽然也可能q?br>在内存里Q但是已l被 Emacs“抛弃”了,所以就找不回来了。】重新插入被U?br>除的文字UCؓ“召回QyankQ?#8221;。一般而言Q那些可能消除很多文字的命o会把<br>消除掉的文字记录下来Q它们被讑֮成了“可召?#8221;Q,而那些只消除一个字W?br>或者只消除I白的命令就不会记录被消除的内容Q自然你也就无法召回了)?br><br>>> Ud光标C非空白行的行_然后输入 C-k U除那一行上的文字?br><br>>> 再次 C-kQ你可以看到它移除了跟在那一行后面的换行W?br><br>注意Q单独的 C-k 会把一行的内容U除Q而第二个 C-k 则会U除换行W,q<br>其后所有的行都向上Ud。C-k 处理数字参数的方式很特别Q它会把参数指定?br>那么多行q同其后的换行符一L除,而不仅仅是重?C-k 而已。比?C-u 2<br>C-k 会把两行以及它们的换行符U除Q而如果只是输?C-k 两次昄不是q个l?br>果?br><br>被U除的文字恢复的动作UCؓ“召回QyankingQ?#8221;。(好像把别h从你w边<br>U走的东西又猛力地拉回来。)你可以在你删除文字的地方召回Q也可以在别?br>地方召回Q还可以多次召回同样的文字以得到它的多个拯?br><br>召回的命令是 C-y。它会在光标所在处插入你最后移除的文字?br><br>>> 试试看,输入 C-y 文字召回?br><br>如果你一ơ连按了好几?C-kQ那么所有被U除的行会被存储在一P只要一?br>C-y 可以把它们都召回?br><br>>> 在这里试试,q箋按几?C-k?br><br>现在再来恢复刚刚被我们移除的文字Q?br><br>>> ?C-y。然后把光标往下移动几行,再按一?C-y?br>   现在你应该知道怎么复制文字了?br><br>C-y 可以召回最q一ơ移除的内容Q那如何召回前几ơ移除的内容呢?它们当然<br>没有丢,你可以用 M-y 来召回它们。在?C-y 召回最q移除的文字之后Q紧?br>着再按 M-y 可以召回再前一ơ被U除的内容,再按一?M-y 又可以召回再?br>一ơ的……q箋使用 M-y 直到扑ֈ你想要召回的东西Q然后什么也不用做,l箋<br>~辑p了?br><br>如果q箋?M-y 很多ơ,你可能会回到起始点,也就是最q移除的文字?br>【看得出q实际上是一个环。?br><br>>> U除一行,Ud一下光标,然后再移除另外一行?br>   ?C-y 第二次U除的那行召回来?br>   紧接着再按 M-yQ它会被第一ơ移除的那行取代?br>   试着再按几下 M-y 看看会发生什么?br>   再l,直到W二行被召回来,然后再做个几ơ?br>   如果感兴,你可以试着l?M-y 指定一个正的或负的参数?br><br><br>* 撤销QUNDOQ?br>--------------<br><br>如果你修改了一D|字,又觉得改得不好,可以?undo 命oq行撤销Q?br>C-x u?br><br>通常 C-x u 会消除一个命令所造成的所有改变;如果你在一行中q箋多次C?br>C-x uQ你会把以前的命令也依次撤销?br><br>但是有两个例外:<br>1Q?没有改变文字的命令不(包括光标Ud命o和滚动命令)<br>2Q?从键盘输入的字符以组为单位――每l?20 个字W――来q行处理?br>    Q这是ؓ了减你在撤销“插入文字”动作旉要输?C-x u 的次敎ͼ<br><br>>> ?C-k 这一行移除,然后输入 C-x u Q它会再ơ出现?br><br>C-_ 也是撤销命oQ它的作用跟 C-x u 一P但是它比较容易多ơ输入。C-_ ?br>~点是在某些键盘上可能不太容易按Q这也正是我们同时提?C-x u 的原因。在<br>某些l端上,你可以按?CONTROL 再按“/”来输?C-_?br><br>数字参数对于 C-_ ?C-x u 的意义是执行撤销的重复次数?br><br><br>* 文gQFILEQ?br>--------------<br><br>想保存工作成果就要记得存盘,否则一旦退?Emacs 你编辑的文字׃丢失。要<br>存盘Q就要在~辑?#8220;L”C个存盘文件。(q个q程通常也被UCؓ“讉K”<br>文g。)<br><br>LC个文件意味着你可以在 Emacs 里查看这个文件的内容。从许多角度看,<br>q就{于你在直接~辑q个文gQ只是你所做的修改只有?#8220;存盘”的时候才?br>被写入文件。也正因为如此,你可以丢弃一个写C半的文g而不必把q个D缺<br>文g也保存到计算Z。在存盘的时候,Emacs 会把存盘前的文g重命名保存,<br>以防你改完之后又惛_悔?br><br>在屏q的下方Q你应该能够看到头尾都是短线“-”的一行,行首通常是一些诸?br>“--:-- TUTORIAL.cn”的文字,q些文字代表了你当前正在讉K的文件。比如你<br>现在正在讉K的文件叫“TUTORIAL.cn”Q它只是一个给你时用的拯。每?br>Emacs LC个文Ӟ文g名就会出现在q个位置?br><br>L文g的命令有一个特点,那就是你必须l出文g名。我们称q个命o“从终<br>端读入了一个参?#8221;Q在q里Q这个参数显然就是文件名Q。在你输入这条命?br>之后Q?br><br>        C-x C-f   L一个文?br><br>Emacs 会提CZ输入文g名。你输入的文件名会出现在屏幕最底端的一行,q一<br>行被UCؓ缓ԌminibufferQ,在小~冲里你可以使用通常?Emacs ~辑命o<br>来编辑文件名?br><br>在小~冲里输入文件名Q其实输入其它东西也一P时可以用 C-g 取消?br><br>>> 输入 C-x C-fQ然后输?C-g<br>   q会x缓Ԍ同时也会取消使用缓冲的 C-x C-f 命o?br>   当然了,你也没有找Q何文件?br><br>?<Return> l束文g名的输入。这之后 C-x C-f 命o开始工作ƈ扑ֈ你指定的<br>文g。小~冲?C-x C-f 命ol束之后也会消失?br><br>眨眼间文件就被显C在屏幕上,你可以开始编辑了。存盘用q条命oQ?br><br>        C-x C-s   储存q个文g<br><br>q条命o?Emacs 中的文字存储到文件中。第一ơ存盘的时?Emacs 会将原文<br>仉命名以备份。重命名的规则通常是在原文件名之后d一?#8220;~”字符?br>【对许多人来_q是一个烦人的Ҏ,x文g备䆾可以用如下命令:<br>  M-x customize-variable <Return> make-backup-files <Return>?br><br>存盘l束后,Emacs 会显C写入文件的文g名。你最好养成经常存盘的习惯Q这<br>可以减少pȝ崩溃和死机给你带来的损失?br><br>>> 输入 C-x C-s 把本快速指南存下来?br>   你会在屏q的下方看到一条消息:“Wrote ...TUTORIAL.cn”?br><br>注意Q在某些l端下,输入 C-x C-s 会冻l屏q【屏q没有Q何输出】,使你?br>不到 Emacs 的Q何变化。其原因是操作系l的“量控制”功能拦截?C-s q?br>ȝ了屏q。用 C-q 可以解除屏幕ȝ。要解决q个问题Q请参?Emacs 手册<br>里的“Spontaneous Entry to Incremental Search”一节【Emacs 手册可能q没<br>有中文翻译】,那里提供了一些有用的?br><br>你不但可以寻找一个已有的文g来查看或~辑Q还可以L一个不存在的文件?br>实际上这正是 Emacs 创徏新文件的ҎQ找C存在的新文g。只有在存盘的时<br>候,Emacs 才会真正创徏q个文g。而在q之后的一切就跟编辑一个已有文件没<br>有区别了?br><br><br>* ~冲区(BUFFERQ?br>------------------<br><br>你可以用 C-x C-f 扑ֈq打开W二个文Ӟ但第一个文件仍然在 Emacs 中。要<br>切回W一个文Ӟ一U办法是再用一?C-x C-f。这P你就可以?Emacs 中同<br>时打开多个文g?br><br>>> ?C-x C-f foo <Return> 的方式徏立一个名?#8220;foo”的文件?br>   输入一些文字,再用 C-x C-s 保存文g“foo”?br>   最后,输入 C-x C-f TUTORIAL.cn <Return> 回到q里?br><br>Emacs 把每个编辑中的文仉攑֜一个称?#8220;~冲区(bufferQ?#8221;的地斏V每?br>扑ֈ一个文ӞEmacs 在其内部开辟一个缓冲区。用下面的命令可以列出当?br>所有的~冲区:<br><br>        C-x C-b   列出~冲?br><br>>> 现在p一?C-x C-b<br><br>观察一下缓冲区是如何被命名的,它很可能跟与其对应的文g同名。实际上Q一<br>?Emacs H格里的M文字都是某个~冲区的一部分?br><br>>> 输入 C-x 1 d~冲区列?br><br>不管存在多少~冲区,M时候都只能有一?#8220;当前”~冲区,也就是你正在~?br>辑的q个。如果你想编辑其它的~冲区,必?#8220;切换”q去。上面讲q,?br>C-x C-f 是一U办法。不q还有一个更单的办法Q那是?C-x b。用q条?br>令,你必输入缓冲区的名U?br><br>>> 输入 C-x b foo <Return> 以回到文?#8220;foo”的缓冲区?br>   然后输入 C-x b TUTORIAL.cn <Return> 回到q里?br><br>大多数情况下Q缓冲区与跟其对应的文g是同名的Q不包括目录名)Q不q这?br>不是l对的。用 C-x C-b 得到的缓冲区列表L昄~冲区名?br><br>你在 Emacs H格里看到的“M”文字都一定属于某个缓冲区。然而,~冲区未<br>必有对应文gQ比如显C缓冲区列表的缓冲区是q样。再比如“*Messages*”<br>~冲Z没有对应文gQ这个缓冲区里存攄都是?Emacs 底部出现的消息?br><br>>> 输入 C-x b *Messages* <Return> 瞅瞅消息~冲区里都有什么东ѝ?br>   然后再输?C-x b TUTORIAL.cn <Return> 回到q里?br><br>如果你对某个文g做了些修改,然后切换到另一个文Ӟq个动作q不会帮你把<br>前一个文件存盘。对W一个文件的修改仍然仅存在于 Emacs 中,也就是在它对?br>的缓冲区里。ƈ且,对第二个文g的修改也不会影响到第一个文件。这很有用,<br>但是也挺ȝQ因为如果你惌存储W一个文Ӟq需要先 C-x C-f 切换回去?br>?C-x C-s 存盘。你需要一个更便的ҎQ?Emacs 已经Z准备好了Q?br><br>        C-x s   保存多个~冲?br><br>C-x s 会找出所有已被修改但未存盘的缓冲区Q然后向你逐个询问Q是否需?br>存盘Q?br><br>>> 插入一行文字,然后输入 C-x s?br>   它应该会问你Q是否要储存名ؓ TUTORIAL.cn 的缓冲区Q?br>   ?#8220;y”告诉它你惛_盘?br><br><br>* 命o集扩展(EXTENDING THE COMMAND SETQ?br>-----------------------------------------<br><br>Emacs 的命令就像天上的星星Q数也数不清。把它们都对应到 CONTROL ?META<br>l合键上昄是不可能的。Emacs 用扩展(eXtendQ命令来解决q个问题Q扩?br>命o有两U风|<br><br>        C-x     字符扩展?nbsp; C-x 之后输入另一个字W或者组合键?br>        M-x     命o名扩展。M-x 之后输入一个命令名?br><br>很多扩展命o都相当有用,虽然与你已经学过的命令比hQ他们可能不那么?br>用。我们早已经见过一些扩展命令了Q比如用 C-x C-f L文g和用 C-x C-s<br>保存文gQ退?Emacs 用的 C-x C-c 也是扩展命o。(不用担心退?Emacs ?br>l你带来什么损失,Emacs 会在退Z前提醒你存盘的)<br><br>在控制台下,C-z 可以暂时d Emacs――当Ӟ你还可以再回来?br><br>在允?C-z 的系l中QC-z 会把 Emacs“挂v”Q也是_它会回到 shell<br>但不退?Emacs。在常用?shell 中,通常可以?#8220;fg”或?#8220;%emacs”命o?br>ơ回?Emacs 中?br><br>在没有提供挂起功能的pȝ中,C-z 会在 Emacs 之下创徏一个子 shell 来让?br>q行其它E序Qƈ且再?#8220;回到”Emacs 中――虽然我们ƈ没有真正dq。这<br>U情况下Q通常?shell 命o“exit”从子 shell 回到 Emacs?br><br>你最好在打算退出登陆的时候再?C-x C-c。在 Emacs 被诸如邮件处理程序之c?br>的外部程序调用之后,也可以用 C-x C-c 退出。不q一般来Ԍ如果你不想退?br>dQ最好还是把 Emacs 挂v而不是退出?br><br>C-x 的扩展命令有很多Q下面列出的是你已经学过的:<br><br>        C-x C-f         L文g?br>        C-x C-s         保存文g?br>        C-x C-b         列出~冲区?br>        C-x C-c         d Emacs?br>        C-x 1           x其它所有窗|只保留一个?br>        C-x u           撤销?br><br>用命令名扩展的命令通常q不常用Q或只用在部分模式下。比?replace-string<br>Q字W串替换Q这个命令,它会在全文范围内把一个字W串替换成另一个。在?br>?M-x 之后QEmacs 会在屏幕底端向你询问q等待你输入命o名。如果你惌?br>“replace-string”Q其实只需要敲“repl s<TAB>”p了,Emacs 会帮你自?br>补齐。输入完之后?<Return> ?br><br>字符串替换命令需要两个参数――被替换的字W串和用来替换它的字W串。每?br>参数的输入都以换行符来结束?br><br>>> 光标移到本行下面第二行的空白处Q然后输?br>   M-x repl s<Return>changed<Return>altered<Return>?br><br>   【以下保留一行原文,以应l习之需Q?br>   Notice how this line has changed: you've replaced... <br><br>h意这一行的变化Q在光标之后的范围内Q你已经?#8220;changed”q个词――不<br>论它在哪里出现――全部用“altered”替换掉了?br><br><br>* 自动保存QAUTO SAVEQ?br>-----------------------<br><br>如果你已l修改了一个文Ӟ但是q没来得及存盘你的计机qŞ工了Q那么你<br>所做的修改很可能会丢失。ؓ了避免这L不幸发生QEmacs 会定期将正在~?br>辑的文g写入一?#8220;自动保存”文g中。自动保存文件的文g名的头尾各有一?br>“#”字符Q比如你正在~辑的文件叫“hello.c”Q那么它的自动保存文件就?br>“#hello.c#”。这个文件会在正常存盘之后被 Emacs 删除?br><br>所以,假如不幸真的发生了,你大可以从容地打开原来的文Ӟ注意不是自动?br>存文Ӟ然后输入 M-x recover file<Return> 来恢复你的自动保存文件。在?br>C确认的时候,输入 yes<Return>?br><br><br>* 回显区(ECHO AREAQ?br>---------------------<br><br>如果 Emacs 发现你输入多字符命o的节奏很慢,它会在窗格的下方UCؓ“回显?#8221;<br>的地方给你提C。回昑֌位于屏幕的最下面一行?br><br><br>* 状态栏QMODE LINEQ?br>---------------------<br><br>位于回显区正上方的一行被UCؓ“状态栏”。状态栏上会昄一些信息,比如Q?br><br>--:**  TUTORIAL.cn       (Fundamental)--L670--54%----------------<br><br>状态栏昄?Emacs 的状态和你正在编辑的文字的一些信息?br><br>你应该知道文件名的意思吧Q就是你扑ֈ的那个文件嘛?NN%-- 昄的是光标?br>全文中的位置。如果位于文件的开_那么显C?--Top-- 而不?--00%--Q如<br>果位于文件的末尾Q就昄 --Bot--。如果文件很,一屏就以昄全部内容Q?br>那么状态栏会显C?--All--?br><br>“L” 和其后的数字l出了光标所在行的行受?br><br>最开头的星号Q?Q表CZ已经Ҏ字做q改动。刚刚打开的文件肯定没有被改动<br>q,所以状态栏上显C的不是星号而是短线Q?Q?br><br>状态栏上小括号里的内容告诉你当前正在用的~辑模式。缺省的模式?br>FundamentalQ就是你现在正在使用的这个。它是一U?#8220;L?#8221;?br><br>Emacs 的主模式林林LR有用来~辑E序代码的――比?Lisp 模式Q也有用<br>来编辑各U自然语a文本的――比?Text 模式。Q何情况下只能应用一个主?br>式,其名UC昄在状态栏上,也就是现在显C?#8220;Fundamental”的地斏V?br><br>L式通常会改变一些命令的行ؓ。比方说Q不编辑什么语a的程序代码,?br>都可以用一个相同的命o来添加注释。但是在不同的语a中注释的语法往往是不<br>同的Q这时不同的L式就会用各自不同的语法规则来d注释。主模式都是?br>以用 M-x 启动的扩展命令,M-x fundamental-mode 可以切换到 Fundamental<br>模式?br><br>~辑自然语言文本――比如现在――应该用 Text 模式?br><br>>> 输入 M-x text mode<Return>?br><br>别担心,什么都没变。不q细心一些可以发玎ͼM-f ?M-b 现在把单引号Q?Q?br>视ؓ词的一部分了。而在先前?Fundamental 模式中,M-f ?M-b 都将单引?br>视ؓ分隔单词的符受?br><br>L式通常都会搞一些类似的动作,因ؓ很多命o其实完成的是“相同的工<br>?#8221;Q只是在不同环境下会有不同的工作方式而已。【所?#8220;求同存异”Q在<br>Emacs 里得C很好的体现?br><br>?C-h m 可以查看当前L式的文档?br><br>>> ?C-u C-v 本行带到屏q的最上方?br>>> 输入 C-h mQ看?Text 模式?Fundamental 模式有哪些不同?br>>> 输入 C-x 1 x文档H格?br><br>L式之所以称之ؓ“主(majorQ?#8221;模式Q是因ؓ同时q有“辅模?#8221;Qminor<br>modeQ存在。辅模式q不能替代主模式Q而是提供一些辅助的功能。每个辅模式<br>都可以独立地开启和关闭Q跟其它辅模式无养I跟主模式也无兟뀂所以你可以?br>使用辅模式,也可以只使用一个或同时使用多个辅模式?br><br>有一个叫做自动折行(Auto FillQ的辅模式很有用Q特别是在编辑自然语a文本<br>的时候。启用自动折行后QEmacs 会在你打字超Z行边界时自动替你换行?br><br>?M-x auto fill mode<Return> 启动自动折行模式。再用一ơ这条命令,自动<br>折行模式会被关闭。也是_如果自动折行模式没有被开启,q个命o会开?br>它;如果已经开启了Q这个命令会关闭它。所以我们说Q这个命令可以用?#8220;开<br>养ItoggleQ?#8221;模式?br><br>>> 现在输入 M-x auto fill mode<Return>。然后随便敲点什么,直到你看到它<br>   分成两行。你必须敲一些空|因ؓ Auto Fill 只在I白处进行断行?br>   【输入空格对英文来说是必ȝQ而对中文则不必。?br><br>行边界通常被设定ؓ 70 个字W【这里指英文字符】,你可以用 C-x f 命o配合<br>数字参数来重新设定它?br><br>>> 输入 C-x f q传递参?20Q?C-u 2 0 C-x f?br>   然后输入一些文字,观察 Emacs 的自动折行动?br>   最后再?C-x f 边界设?70?br><br>如果你在D落的中间做了一些修改,那么自动折行模式不会替你把整个段落重?br>折行Q你需要用 M-q 手动折行。注意,光标必须位于你需要折行的那一D里?br><br>>> Ud光标到前一D中Q然后输?M-q?br><br><br>* 搜烦QSEARCHINGQ?br>-------------------<br><br>Emacs 可以向前或向后搜索字W串。搜索命令是一个移动光标的命oQ搜索成?br>后,光标会停留在搜烦目标出现的地斏V?br><br>Emacs 的搜索命令的独特之处在于Q它?#8220;渐进的(incrementalQ?#8221;。意思是?br>索与输入同时q行Q你在键盘上一字一句地输入搜烦词的q程中,Emacs 已l?br>开始替你搜索了?br><br>C-s 是向前搜索,C-r 是向后搜索。不q手别这么快Q别着急试?br><br>在按?C-s 之后Q回昑֌里会?#8220;I-search”字样出现Q表明目?Emacs 正处<br>?#8220;渐进搜烦”状态,q等待你输入搜烦字串。按 <Return> 可以l束搜烦?br><br>>> 输入 C-s 开始一个搜索。注意敲慢一点,一ơ输入一个字W?br>   慢慢输入“cursor”q个词,每敲一个字都停一下ƈ观察光标?br>   现在你应该已曄扑ֈ“cursor”q个词了?br>>> 再按一?C-sQ搜索下一?#8220;cursor”出现的位|?br>>> 现在按四ơ退格键Q看看光标是如何Ud的?br>>> ?<Return> l束搜烦?br><br>看仔l了么?在一ơ渐q式搜烦中,Emacs 会尝试蟩到搜索目标出现的位置。要<br>跛_下一个命中位|,再按一?C-s。如果找不到目标QEmacs 会发?#8220;?#8221;<br>的一壎ͼ告诉你搜索失败。在整个q程中,都可以用 C-g 来终止搜索。【你会发<br>?C-g 会让光标回到搜烦开始的位置Q?<Return> 则让光标留在搜烦l果上,<br>q是很有用的功能。?br><br>注意Q在某些l端下,输入 C-x C-s 会冻l屏q【屏q没有Q何输出】,使你?br>不到 Emacs 的Q何变化。其原因是操作系l的“量控制”功能拦截?C-s q?br>ȝ了屏q。用 C-q 可以解除屏幕ȝ。要解决q个问题Q请参?Emacs 手册<br>里的“Spontaneous Entry to Incremental Search”一节【Emacs 手册可能q没<br>有中文翻译】,那里提供了一些有用的?br><br>在渐q式搜烦中,按退格键会删除目标字W串的最后一个字W,q且光标会回?br>最q一ơ搜索的命中位置。比如你已经输入?#8220;c”Q光标就停在“c”W一ơ出<br>现的位置Q再输入“u”Q光标停?#8220;cu”W一ơ出现的位置Q这时再按退格键Q?br>“u”׃搜烦字串中消׃Q然后光标会回到“c”W一ơ出现的位置?br><br>另外Q如果你在搜索的时候输入了 CONTROL 或?META l合键的话,搜烦可能?br>l束。(也有例外Q比?C-s ?M-r q些用于搜烦的命令。)<br><br>前面说的都是“向下”搜烦Q如果想“向上”搜烦Q可以用 C-r。C-r ?C-s<br>相比除了搜烦方向相反之外Q其余的操作都一栗?br><br><br>* 多窗|MULTIPLE WINDOWSQ?br>----------------------------<br><br>Emacs 的迷Z处很多,能够在屏q上同时昄多个H格是其中之一?br><br>>> Ud光标到这一行,然后输入 C-u 0 C-l?br><br>>> 现在输入 C-x 2Q它会将屏幕划分成两个窗根{?br>   q两个窗格里昄的都是本快速指南,而光标则停留在上方的H格里?br><br>>> 试试?C-M-v 滚动下方的窗根{?br>   Q如果你q没?META 键,?ESC C-v 也可以。)<br>   【向上滚动是 C-M-S-vQ也是同时按住 CONTROL、META ?SHIFT 再按 v?br><br>>> 输入 C-x oQ?#8220;o”指的?#8220;其它QotherQ?#8221;Q,<br>   光标{Ud下方的窗根{?br><br>>> 在下方的H格中,?C-v ?M-v 来滚动?br>   同时l箋在上方的H格里阅读这些指对{?br><br>>> 再输?C-x o 光标移回到上方的窗格里?br>   光标会回到它在上方窗g原本所在的位置?br><br>q箋使用 C-x o 可以遍历所有窗根{每一个窗格都有它自己的光标位|,但是?br>有一个窗g真正昄q个光标。【其它窗格在控制C不会昄光标Q在囑Ş<br>H口下缺省显CZؓ镂空光标。】一般所有的~辑命o都作用于q个光标所在的H?br>|我们U这个窗gؓ“被选中的窗?#8221;?br><br>当你在一个窗g~辑Q但用另一个窗g为参考的时候,C-M-v 是很有用的命<br>令。你可以始终处于~辑H格中,然后?C-M-v 命o滚动另外一个窗根{【比?br>译和校对就很适合用这U方式进行。?br><br>C-M-v 是一?CONTROL-META l合键。如果你?META 键的话,可以同时按住<br>CONTROL ?META 键ƈ输入 v。CONTROL ?META 键先按哪个都可以Q因为它?br>只是用来“修饰QmodifyQ?#8221;你输入的字符的?br><br>如果你ƈ没有 META 键,你也可以?ESC 来代替,不过q样的话p注意按键?br>序了Q你必须先输?ESC Q然后再输入 CONTROL-v。CONTROL-ESC v 是没用的Q?br>因ؓ ESC 本n是一个字W键Q而不是一个修饰键Qmodifier keyQ?br><br>>> Q在上方H格里)输入 C-x 1 x下方H格?br><br>Q如果你在下方的H格里输?C-x 1Q那么就会关掉上方的H格。你可以把这?br>命o看成?#8220;只保留一个窗?#8221;――就是我们正在编辑的q个。)<br><br>不同的窗格可以显CZ同的~冲区。如果你在一个窗格里?C-x C-f 打开了一?br>文gQ另一个窗格ƈ不会发生什么变化。Q何一个窗格里都可以用来打开文g?br><br>用下面的Ҏ可以在一个新开H格里打开文gQ?br><br>>> 输入 C-x 4 C-fQ紧跟着输入一个文件名Q再?<Return> l束?br>   可以看到你指定的文g出现在下方的H格中,同时光标也蟩C那里?br><br>>> 输入 C-x o 回到上方的窗|然后再用 C-x 1 x下方H格?br><br><br>* 递归~辑QRECURSIVE EDITING LEVELSQ?br>--------------------------------------<br><br>有时候你会进入所谓的“递归~辑”。递归~辑状态由位于状态栏的方括号所?br>C,其中包含了用括h指明的模式名U。比如说Q你有时可能会看?br>[(Fundamental)]Q而不?(Fundamental)。【比如在?M-% q行交互式替换的<br>时候你又用?C-s q行搜烦Q这时替换模式ƈ没有l束Q但你又q入了搜索模式,<br>q就是所谓的递归~辑。?br><br>d递归~辑可以?ESC ESC ESC。这是一个最通用?#8220;d”命oQ你甚至?br>以用它来关掉多余的H格Q或者离开缓册Ӏ?br><br>>> 输入 M-x q入缓Ԍ然后输入 ESC ESC ESC d?br><br>你不能用 C-g 退出递归~辑Q因?C-g 的作用是取消“本层递归~辑之内”?br>命o和其参数QargumentsQ?br><br><br>* 获得更多帮助QGETTING MORE HELPQ?br>-----------------------------------<br><br>本快速指南的目的仅仅是帮助你?Emacs 的vz里下水Q不至于束手无策望洋?br>叏V有?Emacs 的话题可谓汗牛充栋,q里自然是难万一。不q?Emacs 很理<br>解你求知若的心情,因ؓ它提供的强大功能实在是太多了。ؓ此,Emacs 提供<br>了一些命令来查看 Emacs 的命令文档,q些命o都以 CONTROL-h 开_q个?br>W也因此被称?#8220;帮助QHelpQ字W?#8221;?br><br>要用帮助(HelpQ功能,请先输入 C-hQ然后再输入一个字W以说明你需要什<br>么帮助。如果你q自己到底需要什么帮助都不知道,那么p?C-h ?QEmacs<br>会告诉你它能提供了哪些帮助。如果你按了 C-h 又想反悔Q可以用 C-g 取消?br><br>Q有些主机改变了 C-h 的意义,q种以己度h外加一刀切的做法实不太好,?br>q倒是让你可以义正辞严地抱怨他们的pȝ理员。话说回来,如果你按 C-h ?br>后没有Q何帮助信息显C出来,那么试试 F1 键或?M-x help <Return> 。)<br><br>最基本的帮助功能是 C-h c。输?C-h c 之后再输入一个组合键QEmacs 会给?br>q个命o的简要说明?br><br>>> 输入 C-h c C-p?br><br>昄的消息应该会是这P<br><br>        C-p runs the command previous-line<br><br>q条消息昄?C-p 命o对应的函数名Q函数名主要用来定制和扩?Emacs。命<br>令的功能由函数完成,所以函数名本n也可以被看成是最单的文档――至对<br>于你已经学过的命令来_它们的函数名以解释它们的功能了?br><br>多字W命令一样可以用 C-h c 来查看?br><br>惛_到更多的信息Q请?C-h c 换成 C-h k 试试看?br><br>>> 输入 C-h k C-p?br><br>上面的命令会新打开一?Emacs H格以显C函数的名称及其文档。你d之后?br>以用 C-x 1 xq个帮助H格。当然你q不需要立卌样做Q你完全可以先在~?br>辑窗格里做点别的事情Q然后再x帮助H格?br><br>q有一些其它有用的 C-h 命oQ?br><br>   C-h f        解释一个函数。需要输入函数名?br><br>>> 试试看,输入 C-h f previous-line<Return>?br>   Emacs 会给出它所知道的所有有?#8220;实现 C-p 命o功能的函?#8221;的信息?br><br>C-h v 用来昄 Emacs 变量的文档。Emacs 变量可以被用?#8220;定制 Emacs 的行<br>?#8221;。同P你需要输入变量的名称?br><br>   C-h a        相关命o搜烦QCommand AproposQ?br>                输入一个关键词然后 Emacs 会列出所有命令名中包含此关键?br>                的命令。这些命令全都可以用 M-x 来启动。对于某些命令来_<br>                相关命o搜烦q会列出一两个l合键?br><br>>> 输入 C-h a file<Return>?br><br>Emacs 会在另一个窗格里昄一?M-x 命o列表Q这个列表包含了所有名UC?br>?#8220;file”的命令。你可以看到?#8220;C-x C-f”q样的组合键昄?#8220;find-file”<br>q样的命令名的旁辏V?br><br>>> ?C-M-v 来回滚动 help H格Q多试几ơ?br><br>>> 输入 C-x 1 来删?help H格?br><br>   C-h i        阅读联机手册Q也是通常讲的 InfoQ?br>                q个命o会打开一个称?#8220;*info*”的特D缓冲区Q在那里Q?br>                你可以阅d装在pȝ里的软g包用手册。要?Emacs 的<br>                用手册,?m emacs <Return> 可以了。如果你之前从没?br>                q?Info pȝQ那么请?#8220;?”QEmacs 会带你进?Info 的<br>                用指南。在看完本快速指南之后,Emacs Info 会成Z的主?br>                参考文档?br><br><br>* 更多_ֽQMORE FEATURESQ?br>---------------------------<br><br>惛_习更多的使用技巧,Emacs 使用手册QmanualQ值得一诅R你可以ȝ版的<br>书,也可以看电子版的联机手册Q可以从 Help 菜单q入或者按 F10 h rQ。提<br>两个你可能会很感兴趣的功能吧Q一个是可以帮你敲键盘?completionQ自?br>补全Q,另一个是方便文g处理?diredQ目录编辑)?br><br>Completion 可以替你节省不必要的键盘输入。比如说你想切换?*Message* ~?br>冲区Q你可以用 C-x b *M<Tab> 来完成。只?Emacs 能够Ҏ你已l输入的<br>文字定你想要输入的内容Q它׃自动帮你补齐。有?Completion 的详l说<br>明可以在 Emacs Info 中的“Completion”一节里扑ֈ?br><br>Dired 能够在一个缓冲区里列Z个目录下的所有文Ӟ可以选择是否也列出子<br>目录Q,然后你可以在q个文g列表上完成对文g的移动、访问、重命名或删?br>{等操作。Dired 也在 Emacs Info 中有详细介绍Q参?#8220;Dired”一节?br><br>Emacs 使用手册里还有许许多多的_ֽ功能{着你来了解?br><br><br>* ȝQCONCLUSIONQ?br>--------------------<br><br>CQ要退?Emacs L C-x C-c。要暂时切换?shell q且E后再回?br>Emacs 里来Q请?C-z。【切换到 shell 仅对控制C?Emacs 有效?br><br>本文完全是ؓ零vҎ手所写的h教程。如果你觉得哪里q看不明白,千万?br>要怀疑自己,那一定是我们没有写好。我们永q欢q你的不满和抱怨?br><br><br>* 译QTRANSLATIONQ?br>---------------------<br><br>译Q孙一?<sunyijiang@gmail.com><br>校对Q水木社区(www.newsmth.netQEmacs 板众多网友及众多 Emacs 中文用户<br><br>Emacs 快速指南(TutorialQ早有两个刘昭宏的中文译本,J简各一。其体版?br>QTUTORIAL.cnQ基本由J体版本QTUTORIAL.zhQ经词语替换而得。然而繁中文<br>不仅在用词习惯上有所不同Q更有诸多表达方式与句法斚w的差异,因此一直以?br>用户使用 TUTORIAL.cn 都会略觉生硬和晦涩。这ơ重新翻?TUTORIAL.cn 的动?br>正是源于q种体验Q希望我们的工作能够让本文更好地发挥其作用。TUTORIAL.zh<br>的译文质量很高,在翻译过E中l予q我们许多借鉴和参考,在此对刘昭宏的工?br>表示感谢?br><br>译q程中最大的挑战莫过于术语译词的选择了。经q水木社?Emacs 板热心网<br>友小范围内的讨论Q我们选择了现在的译法。用Lq泛参与是自pY件生命力<br>的源泉,所以如果你有Q何徏议、勘误或xQ请用你喜欢的方式向我们提出?br>你可以通过电子邮g直接联系译者,也可以放?GNU Emacs 的开发邮件列表或?br>水木C֌?Emacs 板上q行讨论?br><br>下面列出主要术语的译词对照,q给出注释说明:<br><br>    command               命o<br>    cursor                光标<br>    scrolling             滚动<br>    numeric argument      数字参数<br>    window                H格 [1]<br>    insert                插入<br>    delete                删除 [2]<br>    kill                  U除 [2]<br>    yank                  召回 [2]<br>    undo                  撤销<br>    file                  文g<br>    buffer                ~冲?br>    minibuffer            缓?br>    echo area             回显?br>    mode line             状态栏<br>    search                搜烦<br>    incremental search    渐进式搜?[3]<br><br>[1] “window”一词在计算机相关的领域一般都被译?#8220;H口”。但是在 Emacs<br>    中,q有一?#8220;frame”的概c在被广泛用的 X H口pȝ和微软的视窗<br>    QWindowsQ系列操作系l中QEmacs 的一?#8220;frame”是一?#8220;H口”Q因<br>    此把 Emacs 中的“frame”译成“H口”更加W合通常的习惯。这PEmacs<br>    中的“window”只能译?#8220;H格”了。我们认?Emacs ?window ?br>    frame 的关pȝH格和窗口来cL是十分Ş象的?br><br>    《学习GNU Emacs》(W二版)一书对“window”?#8220;frame”的翻译与本教E?br>    刚好相反Q分别译?#8220;H口”?#8220;H格”Q。在此特别注明,以消除可能?br>    的疑惑。(感谢李旭?<lixuzhang@gmail.com> 指出Q?br><br>[2] 对于“delete”?#8220;kill”的区别,正文已经l出了详l的说明?#8220;删除”?br>    “U除”相比较v来,前者更多地隐含着“破坏”?#8220;不可恢复”的意思,?br>    后者更多地隐含着“被{U?#8221;?#8220;可恢?#8221;的意思。因此分别选择它们作ؓ?br>    qC词的译词Q希望能够体现出区别?#8220;yank”在中文文档中鲜有对应译词?br>    玎ͼ译的困难较大。究其本意是Q?#8220;a strong sudden pull”Q参见韦氏词<br>    典)Q即“猛然拉回”。在原文档中 yank 被引申ؓ“先前移除的东西再移<br>    回来”q个意思,所以我们选择?#8220;召回”一词与其对应?br><br>[3] “incremental”一词在计算作中q泛出现Q被q泛接受的中文译词有?br>    个:“增量?#8221;?#8220;渐进?#8221;?#8220;incremental search”译?#8220;增量式搜?br>    ”或?#8220;渐进式搜?#8221;都讲得通,且都有各自的形象之处。还是参考原文对?br>    的解释:“... means that the search happens while you type in the<br>    string to search for”。意思是之所以称其ؓ“incremental search”Q是<br>    因ؓ“在你输入搜烦字符串的q程中,搜烦已l在q行?#8221;。我们认?#8220;?br>    量的”更加在现有基上的变化Q比?#8220;增量备䆾”Q?#8220;增量~译”Q;<br>    ?#8220;渐进?#8221;更加q程的逐渐发展Q也更加W合原文的意思。因此我们?br>    择将“incremental search”译作“渐进式搜?#8221;?br><br><br>* 版权声明QCOPYINGQ?br>---------------------<br><br>This tutorial descends from a long line of Emacs tutorials<br>starting with the one written by Stuart Cracraft for the original Emacs.<br><br>This version of the tutorial, like GNU Emacs, is copyrighted, and<br>comes with permission to distribute copies on certain conditions:<br><br>Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004,<br>   2005, 2006, 2007  Free Software Foundation, Inc.<br><br>   Permission is granted to anyone to make or distribute verbatim copies<br>   of this document as received, in any medium, provided that the<br>   copyright notice and permission notice are preserved,<br>   and that the distributor grants the recipient permission<br>   for further redistribution as permitted by this notice.<br><br>   Permission is granted to distribute modified versions<br>   of this document, or of portions of it,<br>   under the above conditions, provided also that they<br>   carry prominent notices stating who last altered them.<br><br>The conditions for copying Emacs itself are more complex, but in the<br>same spirit.  Please read the file COPYING and then do give copies of<br>GNU Emacs to your friends.  Help stamp out software obstructionism<br>("ownership") by using, writing, and sharing free software!<br><br>【下面ؓ版权声明的译文,仅供参考。实际法律效力以英文原文为准。?br><br>本快速指南沿袭自历史悠久?Emacs 快速指南,可上溯至 Stuart Cracraft 为最<br>初的 Emacs 所作的版本?br><br>本篇文档?GNU Emacs 一h有版权,q允许在下列条g的约束下发行其拷贝:<br><br>   Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004, 2005, 2006,<br>   2007  Free Software Foundation, Inc.<br><br>   本文档允许在不变更文档内容的情况下由M人发布在M媒体上,同时必须<br>   完整保留版权和许可声明,且需l予受众与发行者完全相同的、如本声明所?br>   许的再次发行本文档的权利?br><br>   本声明允许在与上q条件相同的情况下发布经q修改的全部或部分文档,同时<br>l   必须附带显要的文字以x文档的最后修改者?br><br>Emacs 自n的版权问题虽比本文档要复杂一些,但也Z相同的精。敬请阅L<br>?#8220;COPYING”Q然后向你的朋友们分?GNU Emacs 拯。让我们以用、编写和<br>分n自由软g的实际行动来共同除软g障碍MQ所谓的“所有权”Q!<br><br>;;; Local Variables:<br>;;; coding: chinese-iso-8bit<br>;;; End:<br><br>;;; arch-tag: 46a53d82-a85a-46b6-bdc7-583aca063578<br><br> <br><img src ="http://www.shnenglu.com/DrMagic/aggbug/37149.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/DrMagic/" target="_blank">Dr.Magic</a> 2007-11-22 17:53 <a href="http://www.shnenglu.com/DrMagic/archive/2007/11/22/37149.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VIM-Project Pluginhttp://www.shnenglu.com/DrMagic/archive/2007/11/19/36964.htmlDr.MagicDr.MagicMon, 19 Nov 2007 11:11:00 GMThttp://www.shnenglu.com/DrMagic/archive/2007/11/19/36964.htmlhttp://www.shnenglu.com/DrMagic/comments/36964.htmlhttp://www.shnenglu.com/DrMagic/archive/2007/11/19/36964.html#Feedback0http://www.shnenglu.com/DrMagic/comments/commentRss/36964.htmlhttp://www.shnenglu.com/DrMagic/services/trackbacks/36964.htmlproject中文帮助Q也 可以下文保存成project.txt文gQ放到vim的doc目录中,覆盖原来的英文帮助。如果你不想覆盖Q你可以把原来的帮助文gUdC层目录或 其他地方Q注意不要重命名攑֜doc目录下,不然在用helptags doc目录产生tags时会提示tag重复的警告信息。以后? help project 出来的就是中文手册了。时间仓促,译的不好,不当或错误之处敬请各位看官指出来?br>
*project.txt*     一个用来管理多个项目及目源代码的插g
        支持版本: Vim 6.x ?Vim7.x
        最后更? 2006 q?10 ?13 ?星期?br style="color: #0846ff;">         译更新: 2007 q?08 ?16 ?星期?br style="color: #0846ff;">
                作者:Aric Blumer
                译者:Denven

                              *project* *project-plugin*

    目录Q?br style="color: #0846ff;">
        1.命o..............调出插g.............|project-invoking|
        2.l承...........目层层关系.........|project-inheritance|
        3.映射.............插g映射..............|project-mappings|
        4.d映射.......为插件添加映?..|project-adding-mappings|
        5.讄..............目讄.............|project-settings|
        6.样例文g..........目样例..............|project-example|
        7.技?.............使用技?................|project-tips|
 

使用q个插g的基本功能可以ؓ你经常访问的文g提供方便的浏? 文g会在 Vim 左侧
H口列出? 在文件名上按 <Return> 或者双击鼠标就可以打开相应的文? q比使用
|file-explorer| L览多层目录要更ؓ便捷.

也可在选择一个文件时候去让插件更改目? 执行指定?Vim 脚本. q些脚本可以通过
修改 $PATH 来设定编译器{的环境. q在q行多项目开发时可以?quickfix 工作在不
同的环境?

其他Ҏ?
    o 在项目中实时加蝲或卸载文?\l, \L, \w, and \W)
    o 在项目中所有文件进行全局搜烦(\g and \G)
    o Ҏ一个文件单独执行用h定的脚本(可以利用q个特写来关联一个文件到
      某一个外部程? (使用\1 ?\9)
    o Ҏ有文件执行某个用h定的脚本(使用\f1-\f9 ?\F1-\F9)
    o 用户高可定制?br style="color: #0846ff;">     o 可以配合 |netrw| 插g使用 XXXX://... 理q程目. XXXX 代表 ftp,
      rcp, scp, or http.

可以在一个单独的U本文g中或?vimrc 中设|几个全局量变q行配置.

必须?|vimrc| 文g?set 'nocompatible' 才能使用q个插g. 也可以通过讄变量
"loaded_project" 来禁止插件被加蝲: >
    :let loaded_project = 1


==============================================================================
COMMANDS                        *project-invoking*

要用本插g, 只需其攄?Vim 的插件目?~/.vim/plugin)卛_. 参见
"|add-global-plugin|", 在下ơ打开 Vim ? 输入如下命o >
    :Project
或?>
    :Project {file}

如果没有指定具体的项目文? 那么会默认?HOME/.vimprojects文g.

命o: [g]vim +Project 可在 Vim 启动时同时自动蝲入project插gH口.

调出目H口时每ơ只能用某一个文? 如果x攚w? 在项目窗口中q行:bwipe
删除目~冲, 然后?:Project {file} 重新载入新的目.


可以在同一个文件中保留和显C多个项? 通过 {} (c参见 |fold.txt|) 来分? 在项?br style="color: #0846ff;"> 中可以有L多个嵌套的折? {} 中的每一行被当作一个文件名. I?# 号后面的?br style="color: #0846ff;"> 容将被忽?

插g使用 Vim 标准的折叠方? 支持所有的 |fold-commands| . 例如双击折叠的首行可
以打开或关闭该折叠. 通过光标定位C个文件名后按回R键或者双d可打开该文?
插g会ؓ在右侧打开一个新H口来显C?如果映射?|CTRL-W_p|, 也是{h?.

                                  *project-syntax*
                                           *语法*
目入口描述形式:
project_entry ::=
    <Description>={projpath} [{options}] {
    [ filename ]
    [ project_entry ]
    }

{options} 可以是下面的一Ҏ者几? 但必L在同一行上.
    CD={path}
    in={filename}
    out={filename}
    filter="{pat}"
    flags={flag}

注意: 一个项目入口可以包含在另一个项目入口里?    q意味着可以在项目中讄层次关系.

<Description> 目描述. 不能含有"="字符. ?=. 的两边不能有I字W? 它会昄在折?br style="color: #0846ff;"> 行上.

{projpath} 目路径. 它指向项目文件所在目? 可以在里面用环境变? 如果是一个相
对\? 插g会根据项目的父目录及其上层目录等层次建立路径, 但最外层的项目入口必?br style="color: #0846ff;"> 是一个绝对\? 参见下面 |project-inheritance|的例?可以在该中使用I格, 但是?br style="color: #0846ff;"> 转义. 下面的两个例子是针对同一个目录的:
>
    Example=/my/directory/with\ spaces {
    }
    Example="/my/directory/with spaces" {
    }

推荐?Windows 上这样? >

    Example="c:\My Documents" {
    }

?Vim 很聪? q样做也是可以的: >

    Example=c:\My\ Documents {
    }

CD= 表示在项目中选定一个文件时 Vim 要q入的目?相当于用|:cd|). q对在需?br style="color: #0846ff;"> 使用本地 Makefile 文gq行~译? 如|:make| 非常有用. 使用 CD=. 表示 Vim ?br style="color: #0846ff;"> {projpath} 及其{h路径设ؓ当前工作目录. 如果不设|?CD 的值将无法中在目中进
行目录都切换, 注意 "=" 的两Ҏ有空? CD 参数也可以是来自其父目录下都一个相?br style="color: #0846ff;"> 路径. 参?|project-inheritance| 中的例子. 在?|netrw| 览目时该指o被
忽略. ?{projpath} 中可以用空?

in= ?out= 用来在进入或者退出文件缓冲时执行特定?Vim 脚本. (参?|BufEnter|
?|BufLeave| 自动命o事g). 它可以?Vim 脚本来ؓ目讑֮或取消一定的环境.
例如:

in.vim: >
    let $PROJECT_HOME='~/my_project'
    " Put the compiler in $PATH
    if $PATH !~ '/path/to/my/compiler'
        let $PATH=$PATH.':/path/to/my/compiler'
    endif

out.vim: >
    " Remove compiler from $PATH
    if $PATH =~ '/path/to/my/compiler'
        let $PATH=substitute($PATH, ':/path/to/my/compiler', '', 'g')
    endif

在这U情况下, 在合适的环境下可以?:make q行~译你正在编辑的文g. 如果脚本?br style="color: #0846ff;"> 使用的是相对路径,  If the path to the script is relative, then it is
relative from {projpath}.
如果子项目没有另行设? q些指o会被子项目? 当配?|netrw| 插g使用? in=
?out= 中的路径必须是绝对\?

filter= qoW? 它指定一个全局?|glob()| 文g匚w模式. 用于在?\r 时更新项?br style="color: #0846ff;"> H口中的文g列表. ׃可能含有多个文g匚w模式, 必须使用双引号将qoW号串扩?br style="color: #0846ff;"> ? 如果不设|过滤符? 插g默认使用通配W?* 来当做过滤符.注意"="前后不能含有I?br style="color: #0846ff;"> ? 如果子项目没有指定具体的qoW? 子项目将会承父目的过滤符.

flags= 标识?为某个折叠设|?启用/取消)具体的特? Z记忆方便, 通常使用写
的表C关闭某一Ҏ? 大写则表C开启某一Ҏ? {flag} 参数可以使用下面的字W标志位:

      标志?nbsp;     描述 ~

    l    关闭?\L 的递归. 对于子折叠的同样也被关闭.

    r    关闭更新. 当对折叠使用了\r or \R 后不要进行更?
            它不影响子目录的递归.

    S    为刷新和创徏目开启排序功?

    s    关闭h和创建项目的排序功能.

    T    开启更新项目时折叠处于当前折叠的正下方. 跟在全局变量
        g:proj_flags 中用标志位{效, 但是不能针对多个折叠而言.

    t    关闭更新目时折叠至当前折叠区域的最剙功能. 强制折叠到底?

    w    关闭 \W 的递归. 对于子折叠的同样也被关闭.


在子目不能沿用爉目中讑֮的这些标?

只对当前折叠生效, 折叠外的文字不受其媄?


==============================================================================
INHERITANCE                         *project-inheritance*

通过下面两个目文g的对比来理解层次的含?
>
    Parent=~/my_project CD=. filter="Make* *.mk" flags=r {
     Child1=c_code {
     }
     Child2=include CD=. filter="*.h" {
     }
    }

Child1 的\径是 "~/my_project/c_code", 因ؓ Child1 l承?~/my_project. 它还
l承?CD. 因ؓ父层?CD=., 所以对于父层的当前工作路径?"~/my_project". 那么
Child1 l承q来?CD 也是"~/my_project". 最? Child1 从父层承过来过滤符.
而标志位则是不能l承?除非单独讄.

Child2 只将 "~/my_project" 从父层承过?

所以上qC子跟下面的展开是等L:
>
    Parent=~/my_project CD=. filter="Make* *.mk" flags=r {
     Child1=~/my_project/c_code CD=~/my_project filter="Make* *.mk" {
     }
     Child2=~/my_project/include CD=~/my_project/include filter="*.h" {
     }
    }

(在一个实际的目? Child1 一般不会希望从父层l承qoW号, 该例子只是ؓ了说?br style="color: #0846ff;">  q个概念而已), 使用 \i 可以昄当前光标下项目的层次关系.


==============================================================================
MAPPINGS                            *project-mappings*

映射    动作 ~

\r    ҎqoW更新光标处的项?  更新目, 每深入一层折叠羃q一个空?

    如果在一行最后用了 "# pragma keep" (不含双引?, 那么该行保?
    不会被在更新时被删除. 当?. 作ؓ一个入口时, q入当前目录q行览
    相当方便, 通常对于q个有用的入口你肯定惛_更新时被保留.
 
    注意q个映射?<LocalLeader>r, Vim 默认使用 \ 作ؓ|<LocalLeader>|.

    对于使用 |netrw| 览的项目不适用.

\R    递归执行 \r.
    对于使用 |netrw| 览的项目不适用.

\c    创徏一个项? 要求用户输入 目描述, 文g路径, CD 参数, 文g名匹配表?br style="color: #0846ff;">         ?|glob()|. 插g会根据这些信息在光标下面建立一个项目的入口.

    对于使用 |netrw| 览的项目不适用.

\C    为目录及其子目录下的文g递归创徏一个项?

<Return>
    在前一H口或者另外一个新H口中打开光标处的文g. 如果光标位于折叠?
    按此键打开或关闭折?

<S-Return>
\s
    ?<Return> 一? 但会水^分割目标H口.   
    使用 <LocalLeader>s 主要是ؓ那些不能识别 <S-Return> 的终端而提供的.

\S
    加蝲所有文件到当前H口, 当前H口会被水^分割昄所有文?

<C-Return>
\o
    ?<Return> 在一个窗口中打开当前文g, 同时关闭其他所有打开的窗?
    该映保证该文g是除目H口以外其他唯一的窗?
           <LocalLeader>o 主要是ؓ那些不能识别 <C-Return> 的终端而提供的.

<M-Return>
\v
    ?<Return> 仅仅昄文g内容, 而光标依然停留在目H口?

<2-LeftMouse>
    (Double-click) 双击鼠标左键, 如果当前光标下是一个已l展开的折叠则关闭
    该折? 反之打开该折? 如果当前光标下ؓ一个文件名, 则在|CTRL-W_p|(?br style="color: #0846ff;">     一H口)或项目右侧新H口中打开该文?

<S-2-LeftMouse>
    ?<S-Return>.

<C-2-LeftMouse>
    ?<C-Return>.

<RightMouse>
    Ҏ变量的?g:proj_window_increment 增加目H口的宽? 反复点击则ؓ
    在原宽度
            g:proj_window_width
    和增加后的宽?br style="color: #0846ff;">             g:proj_window_width + g:proj_window_increment
    之间切换.

    是否能够切换原窗口和宽窗? 或手动改变窗口宽度均取决于全局变量
    g:proj_flags 中的标志?'t' 是否讄. (参见|project-flags|).

    注意在其他窗口中单击鼠标时右键ƈ不能自动光标定位到目H口.
    在离开目H口? 目H口宽度会变回到原宽?g:proj_window_width.

<space> ?<RightMouse>

<CTRL-Up>
\<Up>
    Ud文本或者折叠到当前光标的上一? 在有的终端中可能无法识别此绑定而失?
    <LocalLeader><Up> 主要是ؓ那些不能识别 <C-Up> 的终端而提供的.

<CTRL-Down>
\<Down>
    Ud文本或者折叠到当前光标的下一? 在有的终端中可能无法识别此绑定而失?
    <LocalLeader><Down> 主要是ؓ那些不能识别 <C-Down>.

\i    在状态栏中显C光标所在折叠完全解析和l承的参? 
    q是专门为手动进入项目时q行相对路径和承参数的调试而映的.

\I    在状态栏昄光标下文件名的全?含\?. 此功能是插g调用
    Project_GetFname(line('.'))函数来实现的.

\1 - \9
    执行?g:proj_run{x} 指定的命? {x} 是执行命令入口的~号.
    参考下文中?g:proj_run1.

\f1-\f9
    执行 g:proj_run_fold{x} 中指定的命o, {x} 执行命o入口的编? 命o只针
    对当前项目层的文? 参考下文中的|project-settings|.

\F1-\F9
    执行 g:proj_run_fold{x} 中指定的命o, {x} 是执行命令入口的~号. 对当?br style="color: #0846ff;">     目层及其所有子目的所有文件执行命? 参考下文中?|project-settings|

\0    昄?\1 ?\9 定义的命?

\f0    昄?\f1 ?\f9 ?\F1 ?\F9 所定义的命? \F0 作用与此相同.

\l    加蝲当前目中的所有文件到 Vim ? 在加载过E中按Q何键可以停止加蝲.

\L    加蝲当前目及其子项目中的所有文件到 Vim ? 误}慎用这个映? 作者ƈ
        不徏议在目中含有成千上万的文g时用该映射. (Z提一? 我的目中有
    5,300 多个文g!) 在加载过E中按Q何键可以停止加蝲.

\w    删除当前目层次中的所有文? (q真正删除文g, 只针对该目l织而言.
    如果文g被修? 会先保存文g.) 擦除q程中按L键可以停止此操作.

\W    删除当前目层及其子层次中的所有文? (q真正删除文g, 只针对该目l?br style="color: #0846ff;">     l而言.    如果文g被修? 会先保存文g.) 擦除q程中按L键可以停止此操作.

\g    搜烦当前目层所有文?

\G    搜烦目所有层所有文?

\e    为先通过 <Return> 选择的项目文件设|环境变? 例如?\e 讑֮环境变量?
    无需打开目中的M文g便可?:make 来进行编?

\E    使用 |file-explorer| 览光标处目录内的文? 不支?netrw 时的目理.

<F12>    当在变量 g:proj_flags (参?|project-flags|)中用了标志?'g' ? 该键
        用来切换打开和关闭项目窗? 可以?vimrc 中进行重新绑? 例如其映射?br style="color: #0846ff;">         <Leader>P:

        nmap <silent> <Leader>P <Plug>ToggleProject

注意׃使用 :help 时帮助窗口跟目H口有所冲突, 该插仉过重新映射 :help避免?br style="color: #0846ff;"> q个问题(在用时你可能无法感觉出?.

==============================================================================
ADDING MAPPINGS                      *project-adding-mappings*
d映射

也可单独?$HOME/.vimproject_mappings 文g中设|自己需要的映射. 如果q个文g?br style="color: #0846ff;"> ? 插g每次启动时候会执行(source)? 下例中定义了l计目中入口数量功能的映射
当按?\K (Kount, q因?C ?K 谐音 :-):时候会昄l计l果 >

    function! s:Wc()
        let b:loadcount=0
        function! SpawnExec(infoline, fname, lineno, data)
        let b:loadcount = b:loadcount + 1
        if getchar(0) != 0 | let b:stop_everything=1 | endif
        endfunction
        call Project_ForEach(1, line('.'), "*SpawnExec", 0, '')
        delfunction SpawnExec
        echon b:loadcount." Files\r"
        unlet b:loadcount
        if exists("b:stop_everything")
        unlet b:stop_everything
        echon "Aborted.\r"
    endif
    endfunction

    nnoremap <buffer> <silent> <LocalLeader>K :call <SID>Wc()<CR>

下例?$HOME/.vimproject_mappings 中实C插g对perforce的整?
>
    function! s:DoP4(cmd)
       let name=Project_GetFname(line('.'))
       let dir=substitute(name, '\(.*\)/.*', '\1', 'g')
       exec 'cd '.dir
       exec "!".a:cmd.' '.Project_GetFname(line('.'))
       cd -
    endfunction

    nmap <buffer> <silent> \pa :call <SID>DoP4("p4add")<CR>
    nmap <buffer> <silent> \pe :call <SID>DoP4("p4edit")<CR>
<
(注意我进入文件所在目录后才可以?$P4CONFIG 文g. 请参考关?perforce 的文?)

q就建立了用映?\pe 来检查用于编辑的文g, ?\pa 来将文g存储.


下例中ؓ <Return> 在打开某种特定文g时映到一个外部程序来. (该例中它?br style="color: #0846ff;"> ?ee 来浏览jpg文g). 管看v来有些刻? 但它q是有点用的.
>
    let s:sid = substitute(maparg('<Return>', 'n'), '.*\(<SNR>.\{-}\)_.*', '\1', '')
    function! s:LaunchOrWhat()
        let fname=Project_GetFname(line('.'))
        if fname =~ '\.jpg$'
        exec 'silent! !ee "'.fname.'"&'
        else
        call {s:sid}_DoFoldOrOpenEntry('', 'e')
        endif
    endfunction
    nnoremap <buffer> <silent> <Return>   \|:call <SID>LaunchOrWhat()<CR>
<
该例中调用外部程序来查看后缀名ؓjpg的文? 对其他文件则仍以?<Return> 处理.

==============================================================================
SETTINGS                            *project-settings*

?vimrc 文g中设定下q变量后, Vim 会在加蝲插g前先使用q些属性从而不按照?br style="color: #0846ff;"> 件的默认属性进行加?

g:proj_window_width
    插g目H口宽度.    默认? 24

    管插g不能完全成功地按照我预想的方式设定窗口的大小,但是q个变量?br style="color: #0846ff;">     讑֮H口大小时还是会起到很大的作?

g:proj_window_increment
    当按I格?<space> 或者单击鼠标左?<LeftMouse >旉目窗口宽度增加量
    默认? 100 (参见 |project-mappings|)

                                   *project-flags*
g:proj_flags
    默认? "imst"
    q些标志位可以用来控制插件的行ؓ, 具体如下:

       标志?nbsp;   描述 ~

    b    讄后将使用 |browse()| 通过览目录来ؓ \c ?\C 讑֮目录.
        默认关闭, 因ؓH口览器本w不允许q行目录的选择.

    c    讄? 在项目窗口中打开文g后会自动关闭目H口.

    F    昄动目H口. 关闭H口的自动调整大和H口替换.
        This allows placement between other windows that wish to share
        similar placement at the side of the screen. 
        在用外部窗口管理器的时候很有用.

    g    讄后会切换打开和关闭项目窗口映到 <F12> ?

    i    讄? 当选择打开一个文件时会在命o行显C文件名和当前工作\?

    l    讄? 目插g在选择一个要打开的文件时,使用命o |:lcd| 替换?br style="color: #0846ff;">         认的 |:cd| 命oL变目? 在有了下面的 L 标志位后, 此标志已l?br style="color: #0846ff;">         用处不大.

    L    与标志位 l 很相? 不管~冲是否被? 它通过安装一个进?d
        ~冲的自动命令|:autocommand| 来确保当前工作目录更改到 CD 参数
        指定的目?(|:lcd| 命o只能为窗口而不能ؓ~冲改变当前工作目录)

    m    在常规模式下开?|CTRL-W_o| ?|CTRL-W_CTRL_O| 映射, 使得当前
        ~冲区成为唯一可见的缓冲区, 但是目H口仍然可见.

    n    讄后将在项目窗口中昄行号.

    s    讄后将在项目窗口中使用语法高亮.

    S    讄后将在更新和创徏目时启用排?

    t    讄后将在按I格 <space> 或鼠标右?<RightMouse> 时候进行原H口
        和加宽窗口之间的切换. 参见 See the entry for  in |project-mappings|.

    T    讄?    子项目的折叠在更新时会紧跟在当前折叠下方昄(而不是其?br style="color: #0846ff;">         ?.

    v    讄后将, ?\G 搜烦时用 :vimgrep 取代 :grep.

g:proj_run1 ...  g:proj_run9
        包含一个作用于文g?Vim 命o, 参考前文中关于 \1 to \9 的映?
 
          %f 替换文g的全路径和文件名
          %F 替换文g的全路径和文件名
          is 替换文g的全路径和包含空格的文g
          %n 只替换文件名
          %N 只替换包含空格的文g?br style="color: #0846ff;">           %h 替换目ȝ?br style="color: #0846ff;">           %H 替换包含I格的项目主目录
          %r 替换?CD 目录相关联的路径
          %R 替换与包含空格的 CD 目录相关联的路径
          %d 替换 CD 目录.
          %D 替换包含I格?CD 目录
          %% 未?br style="color: #0846ff;">
        例如, 如果?vimrc 中做了如下设|? 在当前光标下按下 \3 时将?br style="color: #0846ff;">         ?gvim : >
         let g:proj_run3='silent !gvim %f'
<        其他的几个例? >
         let g:proj_run1='!p4 edit %f'
         let g:proj_run2='!p4 add %f'
         let g:proj_run4="echo 'Viewing %f'|sil !xterm -e less %f &"
<
        ?Windows pȝ中应用单引号括住 %f, %h, %d 以避?\ 引v的{?

g:proj_run_fold1 ...  g:proj_run_fold9
        包含一个作用于折叠内文件的 Vim 命o. 参考前文中关于 \f1 to \f9
            ?\F1 to \F9 的映部?$HOME/.vimproject_mappings
 
        %f 替换文g? %h 替换目的主目录, %d 替换 CD 目录.
        对应多个文g名有两种处理方式:

        W一U?默认?处理方式使用 %f 替换所有的l对文g? 让命令只?br style="color: #0846ff;">         行一?    W二U是让命令针Ҏ个非l对文g名执行一? %f 每次?br style="color: #0846ff;">         替换一个文件名. 使用W二U方式时, d变量 g:proj_run_fold{x}
        的开头加上一个通配W?'*' (通配W?'*' 在运行时被自动L.)

        例如, 注意以下两种方式的差? >
         let g:proj_run_fold3="*echo '%h/%f'"
         let g:proj_run_fold4="echo '%f'"
<
        注意在Windowspȝ? 需要用 '' ?%f, %h, %c 括v? 否则路径?br style="color: #0846ff;">         使用?\ 会出问题. 另一U办法是把它们放?|escape()| 函数?


==============================================================================
PROJECT EXAMPLE FILE                         *project-example*

例子: 目文g(~/.vimprojects): >

  1    My Project=~/c/project CD=. in=in.vim out=out.vim flags=r {
  2     Makefile
  3      in.vim
  4      out.vim
  5     GUI Files=. filter="gui*.c gui*.h" {
  6      gui_window.c
  7      gui_dialog.c
  8      gui_list.c
  9      gui.h           # Header file
 10     }
 11     Database Files=. filter="data*.c data*.h" {
 12      data_read.c
 13      data_write.c
 14      data.h
 15     }
 16     OS-Specific Files {
 17      Win32=. filter="os_win32*.c os_win32*.h" {
 18       os_win32_gui.c
 19       os_win32_io.c
 20      }
 21      Unix=. filter="os_unix*.c os_unix*.h" {
 22       os_unix_gui.c
 23       os_unix_io.c
 24      }
 25     }
 26    }

(注意左侧的行号不是文件内?)


==============================================================================
插g技?                            *project-tips*

1.  先ؓ目创徏一个入? >

    Label=~/wherever CD=. filter="*.c *.h" {
    }
<
    然后光标定位在折叠上按 \r, 脚本会自动添加对应目录下所?C 文g(本例?
    到项目之? q与 \c 是等效的, 只是没有对话框显C?

2.  可以在项目列表里随时d,删除或排序项目文?

3.  当项目窗口没有打开? 输入 >
    :Project
<   可以其打开. (插g有自动记忆功? 而无需输入具体的项目名U?) 如果?
    g:proj_flags 变量中设定了 'm' 标志? 通过l合?|CTRL-W_o| 可以重新打开
    目H口. 毫无疑问, q会关闭除当前窗口之外的其他所有打开的窗?

4.  往目中添加新的文? 例如d 'more.c' 到项目中? 只需在项目入口之中插
    入文件名后按 <Return> 键即?

5.  当?|quickfix| 时? 在文件名上按回R?<Return> q不会有? q样的话,
    无法更改目? q行脚本. 解决办法是在使用 |quickfix| 前用 \L 所有文?br style="color: #0846ff;">     载入到项目中?

6.  当项目窗口因为或开或闭的折叠显得凌乱时, 使用 |zM| 可以关闭所有的展开折叠,
    让项目窗口重新变得整z如?

7.  对于高用户, 可以试插g提供如下几个函数:
    Project_GetAllFnames()
    q回一个折叠及其子目(可?下的所有文件名. 
    Project_ForEach()
    在ؓ目中的每个文g提供一个调用函数的接口.如何使用请参考上面的例子?br style="color: #0846ff;">     及源代码.
    Project_GetFname(line_number)
    在编写自q映射时用来获取文件名.

8.  光标定位到目插gH口的键映射, ?vimrc 文g中添?
>
        nmap <silent> <Leader>P :Project<CR>
<
9.  目入口中用符?."会调出|file-explorer|插g. Z防止在更新时候删?
    在项目入口中加入:
>
     . # pragma keep
<
==============================================================================
致谢

    感谢下列朋友为我在此插g开发过E中提供一些补?

        Tomas Zellerin
        Lawrence Kesteloot
        Dave Eggum
        A Harrison
        Thomas Link
        Richard Bair
        Eric Arnold
        Peter Jones
        Eric Van Dewoestine

 vim:ts=8 sw=8 noexpandtab tw=80 ft=help:



Dr.Magic 2007-11-19 19:11 发表评论
]]>
Testhttp://www.shnenglu.com/DrMagic/archive/2007/04/25/22815.htmlDr.MagicDr.MagicWed, 25 Apr 2007 10:48:00 GMThttp://www.shnenglu.com/DrMagic/archive/2007/04/25/22815.htmlhttp://www.shnenglu.com/DrMagic/comments/22815.htmlhttp://www.shnenglu.com/DrMagic/archive/2007/04/25/22815.html#Feedback0http://www.shnenglu.com/DrMagic/comments/commentRss/22815.htmlhttp://www.shnenglu.com/DrMagic/services/trackbacks/22815.html点击q里l我发消?></a><img src =

Dr.Magic 2007-04-25 18:48 发表评论
]]>
WTL White Paperhttp://www.shnenglu.com/DrMagic/archive/2006/03/27/4655.htmlDr.MagicDr.MagicMon, 27 Mar 2006 07:47:00 GMThttp://www.shnenglu.com/DrMagic/archive/2006/03/27/4655.htmlhttp://www.shnenglu.com/DrMagic/comments/4655.htmlhttp://www.shnenglu.com/DrMagic/archive/2006/03/27/4655.html#Feedback0http://www.shnenglu.com/DrMagic/comments/commentRss/4655.htmlhttp://www.shnenglu.com/DrMagic/services/trackbacks/4655.html阅读全文

Dr.Magic 2006-03-27 15:47 发表评论
]]>
Event Programming in C++ (Part I)http://www.shnenglu.com/DrMagic/archive/2006/03/16/4230.htmlDr.MagicDr.MagicThu, 16 Mar 2006 03:08:00 GMThttp://www.shnenglu.com/DrMagic/archive/2006/03/16/4230.htmlhttp://www.shnenglu.com/DrMagic/comments/4230.htmlhttp://www.shnenglu.com/DrMagic/archive/2006/03/16/4230.html#Feedback2http://www.shnenglu.com/DrMagic/comments/commentRss/4230.htmlhttp://www.shnenglu.com/DrMagic/services/trackbacks/4230.html阅读全文

Dr.Magic 2006-03-16 11:08 发表评论
]]>
AvƷþ| þþþþ޾Ʒ| Բľþþþþ| 99ƷȾþ| ھƷþþþþþ| þþƷһպ| þѹƷ| vaþþþͬ | þþƷһ | þ93Ʒ91þۺ| þĻavŮ| þþþһƷɫ| þþƷֻоƷ66 | ҹþӰԺ| þþþ99оƷ10 | һŮȫƾþƬ | þĻ| ƷþþþþĻ| ˾þùѹۿƵ| þ91Ʒ91þû| ùƷӰ˾þ| þùɫAVѹۿ| þþþþþþþþþþþ| ɫþþ99Ʒ91| þó鱬Ļ| Ļձ޾þþ| þûƵ| 99þþƷһëƬ | ƷþþþþĻ | þþƷAV| ŷþ18| þþþþaŷa| þˮav뾫Ʒ鶹 | 99þùۺϾƷӰԺ| ޹Ʒþþò| Ʒþþþþ| 99Ʒ˾þþô߽| ƷŮþþ| þøݾƷԴվ| ݺݺɫۺϾþ| 99þerֻоƷ18|