Emacs.docx
《Emacs.docx》由会员分享,可在线阅读,更多相关《Emacs.docx(26页珍藏版)》请在冰点文库上搜索。
Emacs
Emacs快捷键
1.退出Emacs
请用C-xC-c(两个连续的组合键)
2.移屏
C-v向前移动一屏
M-v向后移动一屏
C-l重绘屏幕,并将光标所在行置于屏幕的中央
3.光标移动
上一行C-p
:
向左移C-b....目前光标位置....向右移C-f
:
下一行C-n
4.光标大幅移动
C-f向右移动一个字符
C-b向左移动一个字符
M-f向右移动一个词【对中文是移动到下一个标点符号】
M-b向左移动一个词【对中文是移动到上一个标点符号】
C-n移动到下一行
C-p移动到上一行
C-a移动到行首
C-e移动到行尾
M-a移动到句首
M-e移动到句尾
M-<(META小于号)可以将光标移动到所有文字的最开头;
M->(META大于号)可以将光标移动到所有文字的最末尾。
5.数字参数的使用
先输入C-u,然后输入数字作为参数,最后再输入命令
6.终止命令
如果Emacs对你的命令失去响应,你可以用C-g来安全地终止这条命令
7.被禁用的命令
有一些Emacs命令被“禁用”了,以避免初学者在不了解其确切功能的情况下误用而造成麻烦。
如果你用到了一个被禁用的命令,Emacs会显示一个提示消息,告诉你这个命令到底是干什么的,询问你是否要继续,并在得到你的肯定之后再执行这命令。
如果你真的想用这条命令,在Emacs询问你的时候应该按空格。
一般来说,如果你不想用,就按“n”。
>>试试C-xC-l(这是一个被禁用的命令)
然后用n来回答询问。
8.*窗格(WINDOWS)
Emacs可以有多个窗格,每个窗格显示不同的文字。
C-x1只保留一个窗格(也就是关掉其它所有窗格)。
也就是先按CONTROL-x然后再按1。
C-x1会保留光标所在的窗格,并将其扩大到整个屏幕,同时关掉所有其它的窗格。
>>把光标移到本行然后输入C-u0C-l。
>>输入CONTROL-hkCONTROL-f。
观察当一个新窗格出现时当前窗格(用来显示CONTROL-f命令的文档)是如何缩小的。
>>输入C-x1关掉文档窗格。
这个命令跟先前学过的命令不太一样,因为它包含了两个字符,以CONTROL-x开始。
有一系列命令都是以CONTROL-x开始的,这些命令许多都跟“窗格、文件、缓冲区【缓冲区(buffer)会在后文详细介绍】”等等诸如此类的东西有关,其中有些命令可能包含了2个、3个或者4个字符。
9.插入与删除
插入文字很简单,直接敲键盘就可以了。
你能看到的字符,比如A、7、*等等,都被Emacs视为文字并且可以直接插入。
敲(回车键)会插入一个换行符。
你可以用来删除最后输入的一个字符,这个跟你在Emacs之外的用法应该一样。
一般来说就是位于键上方某处的一个大块头的键,通常被标示为“Delete”、“Del”或者“Backspace”。
如果你找到了“Backspace”键,那么它应该就是;这时哪怕你又在别的地方找到了一个“Del”键,那么它也应该不是。
一种更通用的说法是,将删除位于光标前的一个字符。
>>现在就来试试――敲点字,然后按几下删除它们。
如果一行文字很长、超出了窗格的宽度,显示不下的部分会在紧邻的下一行继续显示。
这时会有一个反斜线(在控制台下是反斜线,如果你用图形窗口系统,则应该是一个小小的转弯箭头)显示在右边沿,表明这是某一行的接续显示。
>>输入文字,一直到屏幕的右边界,然后继续,你会看到一个接续行出现。
>>用删掉一些文字,直到此行长度小于窗格宽度,接续行就消失了。
换行符跟其它字符一样可以被删除。
两行中间的换行符被删除后,这两行将会合并成一行。
如果合并后的这一行太长,超出了窗格宽度,它就会以一个接续行来显示。
>>移动光标到某行的开头并输入。
这时该行将与其前一行一起被合并为一行。
>>输入重新插入你刚才删除的换行符。
>>试试C-u8*,这将会插入********。
删除还可以“以词为单位”进行,下面是一个关于“删除”操作的小结:
删除光标前的一个字符
C-d删除光标后的一个字符
M-移除光标前的一个词
M-d移除光标后的一个词
C-k移除从光标到“行尾”间的字符
M-k移除从光标到“句尾”间的字符
你也可以用一种通用的办法来移除缓冲区里的任何一部分:
首先把光标移动到你
想要移除的区域的一端,然后按C-@或C-SPC(任一即可,SPC指空格)【注意,
C-SPC往往被中文用户设定成输入法热键,如果这样,C-SPC就被系统拦截而无
法传递给Emacs了,因此这里还是推荐使用C-@。
】,然后将光标移动到另一端,
再按C-w就可以把位于这两点之间的所有文字移除了。
>>移动光标到上一段开头的“你”字。
>>输入C-@。
Emacs应该会在屏幕的下方显示一个“Markset”的消息。
>>移动光标到第二行中的“端”字。
>>输入C-w,从“你”开始到“端”之前的文字被全部移除。
注意,“移除(kill)”和“删除(delete)”的不同在于被移除的东西可以找回
来,而被删除的就不行了。
【实际上,移除掉的东西虽然看起来“消失”了,但
实际上被Emacs记录了下来,因此还可以找回来;而删除掉的东西虽然也可能还
在内存里,但是已经被Emacs“抛弃”了,所以就找不回来了。
】重新插入被移
除的文字称为“召回(yank)”。
一般而言,那些可能消除很多文字的命令会把
消除掉的文字记录下来(它们被设定成了“可召回”),而那些只消除一个字符
或者只消除空白的命令就不会记录被消除的内容(自然你也就无法召回了)。
>>移动光标到一非空白行的行头,然后输入C-k移除那一行上的文字。
>>再次C-k,你可以看到它移除了跟在那一行后面的换行符。
注意,单独的C-k会把一行的内容移除,而第二个C-k则会移除换行符,并使
其后所有的行都向上移动。
C-k处理数字参数的方式很特别,它会把参数指定的
那么多行连同其后的换行符一起移除,而不仅仅是重复C-k而已。
比如C-u2
C-k会把两行以及它们的换行符移除;而如果只是输入C-k两次显然不是这个结
果。
将被移除的文字恢复的动作称为“召回(yanking)”。
(就好像把别人从你身边
移走的东西又猛力地拉回来。
)你可以在你删除文字的地方召回,也可以在别的
地方召回,还可以多次召回同样的文字以得到它的多个拷贝。
召回的命令是C-y。
它会在光标所在处插入你最后移除的文字。
>>试试看,输入C-y将文字召回。
如果你一次连按了好几下C-k,那么所有被移除的行会被存储在一起,只要一个
C-y就可以把它们都召回。
>>在这里试试,连续按几次C-k。
现在再来恢复刚刚被我们移除的文字:
>>按C-y。
然后把光标往下移动几行,再按一次C-y。
现在你应该知道怎么复制文字了。
C-y可以召回最近一次移除的内容,那如何召回前几次移除的内容呢?
它们当然
没有丢,你可以用M-y来召回它们。
在用C-y召回最近移除的文字之后,紧接
着再按M-y就可以召回再前一次被移除的内容,再按一次M-y又可以召回再上
一次的……连续使用M-y直到找到你想要召回的东西,然后什么也不用做,继续
编辑就行了。
如果连续按M-y很多次,你可能会回到起始点,也就是最近移除的文字。
【看得出这实际上是一个环。
】
>>移除一行,移动一下光标,然后再移除另外一行。
按C-y将第二次移除的那行召回来。
紧接着再按M-y,它将会被第一次移除的那行取代。
试着再按几下M-y看看会发生什么。
再继续,直到第二行被召回来,然后再做个几次。
如果感兴趣,你可以试着给M-y指定一个正的或负的参数。
10.撤销
如果你修改了一段文字,又觉得改得不好,可以用undo命令进行撤销:
C-xu。
通常C-xu会消除一个命令所造成的所有改变;如果你在一行中连续多次地使用C-xu,你会把以前的命令也依次撤销。
但是有两个例外:
1)没有改变文字的命令不算(包括光标移动命令和滚动命令)
2)从键盘输入的字符以组为单位――每组20个字符――来进行处理。
(这是为了减少你在撤销“插入文字”动作时需要输入C-xu的次数)
>>用C-k将这一行移除,然后输入C-xu,它会再次出现。
C-_也是撤销命令;它的作用跟C-xu一样,但是它比较容易多次输入。
C-_的
缺点是在某些键盘上可能不太容易按,这也正是我们同时提供C-xu的原因。
在
某些终端上,你可以按住CONTROL再按“/”来输入C-_。
数字参数对于C-_和C-xu的意义是执行撤销的重复次数。
11.文件
想保存工作成果就要记得存盘,否则一旦退出Emacs你编辑的文字就会丢失。
要存盘,就要在编辑前“寻找”到一个存盘文件。
(这个过程通常也被称为“访问”文件。
)
寻找到一个文件意味着你可以在Emacs里查看这个文件的内容。
从许多角度看,这就等于你在直接编辑这个文件,只是你所做的修改只有在“存盘”的时候才会被写入文件。
也正因为如此,你可以丢弃一个写到一半的文件而不必把这个残缺文件也保存到计算机上。
在存盘的时候,Emacs会把存盘前的文件重命名保存,以防你改完之后又想反悔。
在屏幕的下方,你应该能够看到头尾都是短线“-”的一行,行首通常是一些诸如“--:
--TUTORIAL.cn”的文字,这些文字代表了你当前正在访问的文件。
比如你现在正在访问的文件叫“TUTORIAL.cn”,它只是一个给你临时使用的拷贝。
每当Emacs寻找到一个文件,文件名就会出现在这个位置。
寻找文件的命令有一个特点,那就是你必须给出文件名。
我们称这个命令“从终端读入了一个参数”(在这里,这个参数显然就是文件名)。
在你输入这条命令之后:
C-xC-f寻找一个文件
Emacs会提示你输入文件名。
你输入的文件名会出现在屏幕最底端的一行,这一行被称为小缓冲(minibuffer),在小缓冲里你可以使用通常的Emacs编辑命令来编辑文件名。
在小缓冲里输入文件名(其实输入其它东西也一样)时可以用C-g取消。
>>输入C-xC-f,然后输入C-g
这会关掉小缓冲,同时也会取消使用小缓冲的C-xC-f命令。
当然了,你也没有找任何文件。
用结束文件名的输入。
这之后C-xC-f命令开始工作并找到你指定的文件。
小缓冲在C-xC-f命令结束之后也会消失。
眨眼间文件就被显示在屏幕上,你可以开始编辑了。
存盘用这条命令:
C-xC-s储存这个文件
这条命令把Emacs中的文字存储到文件中。
第一次存盘的时候Emacs会将原文件重命名以备份。
重命名的规则通常是在原文件名之后添加一个“~”字符。
【对许多人来说,这是一个烦人的特性,关掉文件备份可以用如下命令:
M-xcustomize-variablemake-backup-files】
存盘结束后,Emacs会显示写入文件的文件名。
你最好养成经常存盘的习惯,这可以减少系统崩溃和死机给你带来的损失。
>>输入C-xC-s把本快速指南存下来。
你会在屏幕的下方看到一条消息:
“Wrote...TUTORIAL.cn”。
你不但可以寻找一个已有的文件来查看或编辑,还可以寻找一个不存在的文件。
实际上这正是Emacs创建新文件的方法:
找到不存在的新文件。
只有在存盘的时候,Emacs才会真正创建这个文件。
而在这之后的一切就跟编辑一个已有文件没有区别了。
12.缓冲区
你可以用C-xC-f找到并打开第二个文件,但第一个文件仍然在Emacs中。
要切回第一个文件,一种办法是再用一次C-xC-f。
这样,你就可以在Emacs中同时打开多个文件。
>>用C-xC-ffoo的方式建立一个名为“foo”的文件。
输入一些文字,再用C-xC-s保存文件“foo”。
最后,输入C-xC-fTUTORIAL.cn回到这里。
Emacs把每个编辑中的文件都放在一个称为“缓冲区(buffer)”的地方。
每寻找到一个文件,Emacs就在其内部开辟一个缓冲区。
用下面的命令可以列出当前所有的缓冲区:
C-xC-b列出缓冲区
>>现在就试一下C-xC-b
观察一下缓冲区是如何被命名的,它很可能跟与其对应的文件同名。
实际上,一个Emacs窗格里的任何文字都是某个缓冲区的一部分。
>>输入C-x1离开缓冲区列表
不管存在多少缓冲区,任何时候都只能有一个“当前”缓冲区,也就是你正在编辑的这个。
如果你想编辑其它的缓冲区,就必须“切换”过去。
上面讲过,用C-xC-f是一种办法。
不过还有一个更简单的办法,那就是用C-xb。
用这条命令,你必须输入缓冲区的名称。
>>输入C-xbfoo以回到文件“foo”的缓冲区。
然后输入C-xbTUTORIAL.cn回到这里。
大多数情况下,缓冲区与跟其对应的文件是同名的(不包括目录名),不过这也不是绝对的。
用C-xC-b得到的缓冲区列表总是显示缓冲区名。
你在Emacs窗格里看到的“任何”文字都一定属于某个缓冲区。
然而,缓冲区未必有对应文件:
比如显示缓冲区列表的缓冲区就是这样。
再比如“*Messages*”缓冲区也没有对应文件,这个缓冲区里存放的都是在Emacs底部出现的消息。
>>输入C-xb*Messages*瞅瞅消息缓冲区里都有什么东西。
然后再输入C-xbTUTORIAL.cn回到这里。
如果你对某个文件做了些修改,然后切换到另一个文件,这个动作并不会帮你把前一个文件存盘。
对第一个文件的修改仍然仅存在于Emacs中,也就是在它对应的缓冲区里。
并且,对第二个文件的修改也不会影响到第一个文件。
这很有用,但是也挺麻烦:
因为如果你想要存储第一个文件,还需要先C-xC-f切换回去再用C-xC-s存盘。
你需要一个更简便的方法,而Emacs已经为你准备好了:
C-xs保存多个缓冲区
C-xs会找出所有已被修改但尚未存盘的缓冲区,然后向你逐个询问:
是否需要存盘?
>>插入一行文字,然后输入C-xs。
它应该会问你,是否要储存名为TUTORIAL.cn的缓冲区?
按“y”告诉它你想存盘。
13.命令集扩展
Emacs的命令就像天上的星星,数也数不清。
把它们都对应到CONTROL和META组合键上显然是不可能的。
Emacs用扩展(eXtend)命令来解决这个问题,扩展命令有两种风格:
C-x字符扩展。
C-x之后输入另一个字符或者组合键。
M-x命令名扩展。
M-x之后输入一个命令名。
很多扩展命令都相当有用,虽然与你已经学过的命令比起来,他们可能不那么常用。
我们早已经见过一些扩展命令了,比如用C-xC-f寻找文件和用C-xC-s保存文件;退出Emacs用的C-xC-c也是扩展命令。
(不用担心退出Emacs会给你带来什么损失,Emacs会在退出之前提醒你存盘的)在控制台下,C-z可以暂时离开Emacs――当然,你还可以再回来。
在允许C-z的系统中,C-z会把Emacs“挂起”,也就是说,它会回到shell但不退出Emacs。
在常用的shell中,通常可以用“fg”或者“%emacs”命令再次回到Emacs中。
在没有提供挂起功能的系统中,C-z会在Emacs之下创建一个子shell来让你运行其它程序,并且再次“回到”Emacs中――虽然我们并没有真正离开过。
这种情况下,通常用shell命令“exit”从子shell回到Emacs。
你最好在打算退出登陆的时候再用C-xC-c。
在Emacs被诸如邮件处理程序之类的外部程序调用之后,也可以用C-xC-c退出。
不过一般来讲,如果你不想退出登录,最好还是把Emacs挂起而不是退出。
C-x的扩展命令有很多,下面列出的是你已经学过的:
C-xC-f寻找文件。
C-xC-s保存文件。
C-xC-b列出缓冲区。
C-xC-c离开Emacs。
C-x1关掉其它所有窗格,只保留一个。
C-xu撤销。
用命令名扩展的命令通常并不常用,或只用在部分模式下。
比如replace-string(字符串替换)这个命令,它会在全文范围内把一个字符串替换成另一个。
在输入M-x之后,Emacs会在屏幕底端向你询问并等待你输入命令名。
如果你想输入“replace-string”,其实只需要敲“repls”就行了,Emacs会帮你自动补齐。
输入完之后按。
字符串替换命令需要两个参数――被替换的字符串和用来替换它的字符串。
每个参数的输入都以换行符来结束。
>>将光标移到本行下面第二行的空白处,然后输入
M-xreplschangedaltered。
【以下保留一行原文,以应练习之需:
】
Noticehowthislinehaschanged:
you'vereplaced...
请注意这一行的变化:
在光标之后的范围内,你已经将“changed”这个词――不论它在哪里出现――全部用“altered”替换掉了。
14.自动保存
如果你已经修改了一个文件,但是还没来得及存盘你的计算机就罢工了,那么你所做的修改就很可能会丢失。
为了避免这样的不幸发生,Emacs会定期将正在编辑的文件写入一个“自动保存”文件中。
自动保存文件的文件名的头尾各有一个“#”字符,比如你正在编辑的文件叫“hello.c”,那么它的自动保存文件就叫“#hello.c#”。
这个文件会在正常存盘之后被Emacs删除。
所以,假如不幸真的发生了,你大可以从容地打开原来的文件(注意不是自动保存文件)然后输入M-xrecoverfile来恢复你的自动保存文件。
在提示确认的时候,输入yes。
15.回显区
如果Emacs发现你输入多字符命令的节奏很慢,它会在窗格的下方称为“回显区”的地方给你提示。
回显区位于屏幕的最下面一行。
16.状态栏
位于回显区正上方的一行被称为“状态栏”。
状态栏上会显示一些信息,比如:
--:
**TUTORIAL.cn(Fundamental)--L670--54%----------------
状态栏显示了Emacs的状态和你正在编辑的文字的一些信息。
你应该知道文件名的意思吧?
就是你找到的那个文件嘛。
-NN%--显示的是光标在
全文中的位置。
如果位于文件的开头,那么就显示--Top--而不是--00%--;如
果位于文件的末尾,就显示--Bot--。
如果文件很小,一屏就足以显示全部内容,
那么状态栏会显示--All--。
“L”和其后的数字给出了光标所在行的行号。
最开头的星号(*)表示你已经对文字做过改动。
刚刚打开的文件肯定没有被改动
过,所以状态栏上显示的不是星号而是短线(-)。
状态栏上小括号里的内容告诉你当前正在使用的编辑模式。
缺省的模式是
Fundamental,就是你现在正在使用的这个。
它是一种“主模式”。
Emacs的主模式林林总总。
有用来编辑程序代码的――比如Lisp模式;也有用
来编辑各种自然语言文本的――比如Text模式。
任何情况下只能应用一个主模
式,其名称会显示在状态栏上,也就是现在显示“Fundamental”的地方。
主模式通常会改变一些命令的行为。
比方说,不管编辑什么语言的程序代码,你
都可以用一个相同的命令来添加注释。
但是在不同的语言中注释的语法往往是不
同的,这时不同的主模式就会用各自不同的语法规则来添加注释。
主模式都是可
以用M-x启动的扩展命令,M-xfundamental-mode就可以切换到Fundamental
模式。
编辑自然语言文本――比如现在――应该用Text模式。
>>输入M-xtextmode。
别担心,什么都没变。
不过细心一些可以发现,M-f和M-b现在把单引号(')
视为词的一部分了。
而在先前的Fundamental模式中,M-f和M-b都将单引号
视为分隔单词的符号。
主模式通常都会搞一些类似的小动作,因为很多命令其实完成的是“相同的工
作”,只是在不同环境下会有不同的工作方式而已。
【所谓“求同存异”,在
Emacs里得到了很好的体现】
用C-hm可以查看当前主模式的文档。
>>用C-uC-v将本行带到屏幕的最上方。
>>输入C-hm,看看Text模式与Fundamental模式有哪些不同。
>>输入C-x1关掉文档窗格。
主模式之所以称之为“主(major)”模式,是因为同时还有“辅模式”(minor
mode)存在。
辅模式并不能替代主模式,而是提供一些辅助的功能。
每个辅模式
都可以独立地开启和关闭,跟其它辅模式无关,跟主模式也无关。
所以你可以不
使用辅模式,也可以只使用一个或同时使用多个辅模式。
有一个叫做自动折行(AutoFill)的辅模式很有用,特别是在编辑自然语言文本
的时候。
启用自动折行后,Emacs会在你打字超出一行边界时自动替你换行。
用M-xautofillmode启动自动折行模式。
再用一次这条命令,自动
折行模式会被关闭。
也就是说,如果自动折行模式没有被开启,这个命令会开启
它;如果已经开启了,这个命令会关闭它。
所以我们说,这个命令可以用来“开
关(toggle)”模式。
>>现在输入M-xautofillmode。
然后随便敲点什么,直到你看到它
分成两行。
你必须敲一些空格,因为AutoFill只在空白处进行断行。
【输入空格对英文来说是必须的,而对中文则不必。
】
行边界通常被设定为70个字符【这里指英文字符】,你可以用C-xf命令配合
数字参数来重新设定它。
>>输入C-xf并传递参数20:
C-u20C-xf。
然后输入一些文字,观察Emacs的自动折行动作
最后再用C-xf将边界设回70。
如果你在段落的中间做了一些修改,那么自动折行模式不会替你把整个段落重新
折行,你需要用M-q手动折行。
注意,光标必须位于你需要折行的那一段里。
>>移动光标到前一段中,然后输入M-q。
17.搜