F10,显示菜单列表;
从菜单列表返回,用ctrl-G;
emacs命令可分为两大类:一类使用ctrl键,而另一类使用Meta(alt)键;
get help ctrl-h
undo change ctrl-x u
exit emacs ctrl-x ctrl-c
键入 C-x C-f,当迷您缓冲区中有相应要求时,请您提供文件的名称(C代表ctrl下同);
C-x b 命令可以从当前缓冲区切换到您指定的另一个缓冲区;
表 2. 常用的 Emacs 缓冲区和文件函数
绑定 |
函数名 |
描述 |
C-x C-s |
save-buffer |
将当前的缓冲区保存到磁盘。 |
C-x s |
save-some-buffers |
要求将所有未保存的缓冲区保存到磁盘。 |
C-x C-c |
save-buffers-kill-emacs |
要求将所有未保存的缓冲区保存到磁盘,并退出 Emacs。 |
C-x C-z |
suspend-emacs |
挂起 Emacs 并使之成为一个后台进程。 |
C-x C-b |
list-buffers |
列出所有缓冲区。 |
C-x k |
kill-buffer |
杀死一个缓冲区(缺省情况下为当前的缓冲区)。 |
C-x C-q |
vc-toggle-read-only |
切换当前缓冲区的可读状态(如果适用还可以执行版本控制)。 |
C-x i |
insert-file |
在插入点插入某个文件的内容。
|
C-p 将光标向上移动到上一行;类似地,C-n 将光标向下移动到下一行。C-f 会向前移动到下一个字符,而 C-b 会向后移动到上一个字符;
如果不想用 PgDn 和 PgUp 键向上和向下移动一屏,请使用 C-v 和 M-v(M--ALT) 这两种键盘输入,它们可起到与前两个键相同的作用。要转至当前行的开始处,请使用 C-a;使用 C-e,转到当前行的结尾;
通常 Meta 键会被绑定到某个命令,这与相应的 Ctrl 键类似,对于移动命令,这条规则也同样适用。当使用 Meta 来代替 Ctrl 时,F 和 B 键可以向前和向后移动一个单词 而不是一个字符,而 A 和 E 键可以移动到当前句子的开头和结尾。(在缺省配置中,没有定义 M-n 和 M-p 键盘输入。)
在 Emacs 中编辑文本
在缓冲区中输入和更改文本,以及在文本中进行导航,是您在 Emacs 中最重要的操作,无论您是在编辑文件,创建新文件,还是仅仅想研读某个文件,都要用到它们。
在此部分,您将学习用来完成下述工作的基本按键序列和命令:如何在缓冲区中输入文本,如何在文本中导航,以及如何对文本进行基本的编辑,如删除字符和单词。
键入文本和在缓冲区中移动
正如您在从头创建一个新文件这一部分看到的,在 Emacs 缓冲区中输入文本是很容易的,您只要动手打字就行。您可以键入字母字符,将其输入某个缓冲区中。
Emacs 有时会被称为无模式编辑器,常被拿来与模式编辑器如 vi 等作比较。这意味着编辑器的行为以及您可以键入的键盘输入和命令在您的会话中是保持不变的,与 vi 等编辑器不同,后者的击键会根据您是在命令模式还是在输入模式而有不同的含义。Emacs 没有这类模式;不过,它确实有一种不同的模式,可以用来更改其行为或扩展其功能,这将是本系列的下一篇教程的主题。
在进行普通的输入时,有些事是您必须记住的。
在插入点插入文本
在 Emacs,有一个重要的概念,被称为插入点,它表示字符的插入位置。这是缓冲区中一个想像的位置,处于光标所在字符和前一个字符之间。
每当您在缓冲区中输入文本时,该文本都会在这个点插入。在缺省情况下,所有文本都在同一行,在这个点之后的文本会向右推移,为您插入的内容让出空间。按 Enter,移到下一行,然后再按一下 Enter,插入一个空白行。
请试着在 practice.b 的开始处插入一段文本。
- 启动 Emacs 时打开该缓冲区:
- 在每一行的末尾按 Enter,以输入一个段落,然后在结尾再按一下 Enter,创建一个空白行。
Tyger! Tyger! burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?
|
移动插入点
您会看到,在您键入时光标会一直跟随,插入点保持不变:从您键入第一个句子开始,您键入的一切内容都被插入字母 O 之前。
要移动插入点,您可以使用方向键,而且正如您预期的那样,所有其他与光标动作有关的键都可供使用,如 PgUp、PgDn、Home 和 End。但 Emacs 自带用来移动光标的键绑定,而且因为您不必将手移到键盘的基准键之外就能使用它们,所以您在打字时会觉得它们非常有用。
正如您在学习如何键入 Meta 组合键部分中看到的,您可以使用 C-p 将光标向上移动到上一行;类似地,C-n 将光标向下移动到下一行。C-f 会向前移动到下一个字符,而 C-b 会向后移动到上一个字符。
如果不想用 PgDn 和 PgUp 键向上和向下移动一屏,请使用 C-v 和 M-v 这两种键盘输入,它们可起到与前两个键相同的作用。要转至当前行的开始处,请使用 C-a;使用 C-e,转到当前行的结尾。
通常 Meta 键会被绑定到某个命令,这与相应的 Ctrl 键类似,对于移动命令,这条规则也同样适用。当使用 Meta 来代替 Ctrl 时,F 和 B 键可以向前和向后移动一个单词 而不是一个字符,而 A 和 E 键可以移动到当前句子的开头和结尾。(在缺省配置中,没有定义 M-n 和 M-p 键盘输入。)
表 3 列出了各种移动和导航的键,以及它们的函数名和描述。试着用它们移动到缓冲区的开头、结尾,和中间的某些位置。
表 3. 有用的 Emacs 键盘输入(用于移动和导航)
键盘输入 |
函数 |
描述 |
C-p, UpArrow |
previous-line |
将插入点向上移动到上一行。 |
C-n, DownArrow |
next-line |
将插入点向下移动到下一行。 |
C-f, RightArrow |
forward-char |
将插入点移动到下一个字符。 |
C-b, LeftArrow |
back-char |
将插入点移动到上一个字符。 |
M-f |
forward-word |
将插入点移动到下一个单词。 |
M-b |
backward-word |
将插入点移动到上一个单词。 |
C-v, PgDn |
scroll-up |
将文本向上滚动一屏。 |
M-v, PgUp |
scroll-down |
将文本向下滚动一屏。 |
Home |
beginning-of-buffer |
将插入点移到缓冲区的开始处。(在某些版本中,这个键被缺省定义为移动到当前行的开始处。) |
End |
end-of-buffer |
将插入点移到缓冲区的末尾。(在某些版本中,这个键被缺省定义为移动到当前行的末尾。) |
C-a |
beginning-of-line |
将插入点移到本行的开始处。 |
C-e |
end-of-line |
将插入点移到本行的结尾。 |
M-a |
beginning-of-sentence |
将插入点移到句子的开始处。 |
M-e |
end-of-sentence |
将插入点移到句子的结尾处。 |
C-{ |
beginning-of-paragraph |
将插入点移到段落的开始处。 |
C-} |
end-of-paragraph |
将插入点移到段落的结尾处。 |
按一下 Ins 键;这将切换到改写模式,该模式在缺省情况下是关闭的;
在 Emacs 中编辑文本
在缓冲区中输入和更改文本,以及在文本中进行导航,是您在 Emacs 中最重要的操作,无论您是在编辑文件,创建新文件,还是仅仅想研读某个文件,都要用到它们。
在此部分,您将学习用来完成下述工作的基本按键序列和命令:如何在缓冲区中输入文本,如何在文本中导航,以及如何对文本进行基本的编辑,如删除字符和单词。
键入文本和在缓冲区中移动
正如您在从头创建一个新文件这一部分看到的,在 Emacs 缓冲区中输入文本是很容易的,您只要动手打字就行。您可以键入字母字符,将其输入某个缓冲区中。
Emacs 有时会被称为无模式编辑器,常被拿来与模式编辑器如 vi 等作比较。这意味着编辑器的行为以及您可以键入的键盘输入和命令在您的会话中是保持不变的,与 vi 等编辑器不同,后者的击键会根据您是在命令模式还是在输入模式而有不同的含义。Emacs 没有这类模式;不过,它确实有一种不同的模式,可以用来更改其行为或扩展其功能,这将是本系列的下一篇教程的主题。
在进行普通的输入时,有些事是您必须记住的。
在插入点插入文本
在 Emacs,有一个重要的概念,被称为插入点,它表示字符的插入位置。这是缓冲区中一个想像的位置,处于光标所在字符和前一个字符之间。
每当您在缓冲区中输入文本时,该文本都会在这个点插入。在缺省情况下,所有文本都在同一行,在这个点之后的文本会向右推移,为您插入的内容让出空间。按 Enter,移到下一行,然后再按一下 Enter,插入一个空白行。
请试着在 practice.b 的开始处插入一段文本。
- 启动 Emacs 时打开该缓冲区:
- 在每一行的末尾按 Enter,以输入一个段落,然后在结尾再按一下 Enter,创建一个空白行。
Tyger! Tyger! burning bright
In the forests of the night,
What immortal hand or eye
Could frame thy fearful symmetry?
|
移动插入点
您会看到,在您键入时光标会一直跟随,插入点保持不变:从您键入第一个句子开始,您键入的一切内容都被插入字母 O 之前。
要移动插入点,您可以使用方向键,而且正如您预期的那样,所有其他与光标动作有关的键都可供使用,如 PgUp、PgDn、Home 和 End。但 Emacs 自带用来移动光标的键绑定,而且因为您不必将手移到键盘的基准键之外就能使用它们,所以您在打字时会觉得它们非常有用。
正如您在学习如何键入 Meta 组合键部分中看到的,您可以使用 C-p 将光标向上移动到上一行;类似地,C-n 将光标向下移动到下一行。C-f 会向前移动到下一个字符,而 C-b 会向后移动到上一个字符。
如果不想用 PgDn 和 PgUp 键向上和向下移动一屏,请使用 C-v 和 M-v 这两种键盘输入,它们可起到与前两个键相同的作用。要转至当前行的开始处,请使用 C-a;使用 C-e,转到当前行的结尾。
通常 Meta 键会被绑定到某个命令,这与相应的 Ctrl 键类似,对于移动命令,这条规则也同样适用。当使用 Meta 来代替 Ctrl 时,F 和 B 键可以向前和向后移动一个单词 而不是一个字符,而 A 和 E 键可以移动到当前句子的开头和结尾。(在缺省配置中,没有定义 M-n 和 M-p 键盘输入。)
表 3 列出了各种移动和导航的键,以及它们的函数名和描述。试着用它们移动到缓冲区的开头、结尾,和中间的某些位置。
表 3. 有用的 Emacs 键盘输入(用于移动和导航)
键盘输入 |
函数 |
描述 |
C-p, UpArrow |
previous-line |
将插入点向上移动到上一行。 |
C-n, DownArrow |
next-line |
将插入点向下移动到下一行。 |
C-f, RightArrow |
forward-char |
将插入点移动到下一个字符。 |
C-b, LeftArrow |
back-char |
将插入点移动到上一个字符。 |
M-f |
forward-word |
将插入点移动到下一个单词。 |
M-b |
backward-word |
将插入点移动到上一个单词。 |
C-v, PgDn |
scroll-up |
将文本向上滚动一屏。 |
M-v, PgUp |
scroll-down |
将文本向下滚动一屏。 |
Home |
beginning-of-buffer |
将插入点移到缓冲区的开始处。(在某些版本中,这个键被缺省定义为移动到当前行的开始处。) |
End |
end-of-buffer |
将插入点移到缓冲区的末尾。(在某些版本中,这个键被缺省定义为移动到当前行的末尾。) |
C-a |
beginning-of-line |
将插入点移到本行的开始处。 |
C-e |
end-of-line |
将插入点移到本行的结尾。 |
M-a |
beginning-of-sentence |
将插入点移到句子的开始处。 |
M-e |
end-of-sentence |
将插入点移到句子的结尾处。 |
C-{ |
beginning-of-paragraph |
将插入点移到段落的开始处。 |
C-} |
end-of-paragraph |
将插入点移到段落的结尾处。 |
使用改写模式
正如您看到的,您键入的文本被插入到插入点处。不过您也可以改写现有的文本。按一下 Ins 键;这将切换到改写模式,该模式在缺省情况下是关闭的。查看模式行,您会看到 Ovwrt,说明该模式已处于活动状态。
使用表 3 中描述的移动命令,移动光标,使之处于 we 中的 w 处,然后键入一个 h 字符。
请试着转至缓冲区的顶部:键入 M-a M-a C-f,将光标移到 y,然后输入一个 i 字符。对于下一个 y,采取同样的操作,键入 M-f C-f C-f C-f i,以使缓冲区看起来再按一下 Ins,关闭改写模式。
引用插入
文本并不仅限于用字母键输入。您可以输入控制字符,也可以根据字符代码输入字符。为此您可以执行引用插入,该命令被绑定到 C-q;此后再按一个键(或组合键)如 Ctrl 组合键,以便在插入点输入该键。您还可以输入一个字符代码值(用八进制表示),然后再按 Enter 键。
移到缓冲区的末尾,键入 Page break here,然后按 Enter。现在键入一个分页符,即 Ctrl-l 代表的字符,在它的后面接一个转义字符,该转义字符的八进制字符值为 033: C-q C-l C-q 033 Enter.
删除,撤消和重复
现在您可以试试 Emacs 中的一些工具,这些工具用来处理现有文本以及撤消(和重复)您已经做出的操作。
删除文本
使用 Backspace 或 Del 键,删除插入点左边的字符。试着用这两个键删除您刚才输入的两个控制字符。
要删除插入点的字符,请用 C-d;类似地,M-d 会从插入点开始,删除到单词的末尾。您还可以向回删除,M-Del 和 M-Backspace 都可以从插入点一直删除到单词的开头。
试着用这些命令删除您刚刚输入的 Page break here 这个句子,然后删除这些单词所在的空行。
将光标移动到文件的最后一行(应该是“What the hand dare seize the fire?”这个句子),然后按几次 M-d,把这一行删除。
撤消和重复
啊呀,如果您并不想删除最后一句怎么办?您可以通过运行 undo 函数把它找回来。该函数被绑定到 C-_,您要键入它,请按住 Ctrl,并用 Shift 键输入下划线。请回到最后一行试试,每个单词操作一次,找回这些单词。
多操作几遍,直到 Page break here 重新显示为止。
现在您又对上次的撤消操作感到后悔了,您确实不想要 Page break here 了。您可以重复您撤消的操作,方法是键入 C-g,这将取消所有的撤消操作,然后多次键入 C-_ 使单词再次消失。
多次运行同一个命令
C-u 是一个通用参数命令,后面接一个数字和一个命令。它将按某个次数多次运行特定的命令。
尝试以下操作:移动到第二句诗的开始处,键入 In what distant d,然后再键入 C-u 2 e,这将写入两个 e 字符。输入以下内容,完成诗句:
ps or skies
Built the fire of thine eyes?
|
键入 C-x C-s,保存您的缓冲区,现在的显示结果如 图 7 所示。
在没有数字参数的情况下,C-u 会假定这个数字为 4。如果您将 C-u 本身作为参数,则 4 会自乘,得到 16;您可以在反复自乘任意多次之后再指定一个命令,如 C-u C-u C-u A 会在插入点处键入 64 个 A。
请用一个 C-b,向回移动,您会看到光标会回到前面的一行。现在试试通用参数,键入 C-u C-b;注意光标向回移动了四个字符(而不是一个)。再试试 C-u C-u C-b,注意光标会向左移动 16 个字符。键入 C-u C-u C-u C-b,然后再指定 1000 作为参数:C-u 1000 C-b。光标会移动到缓冲区的开始处,但请注意,Emacs 会发出蜂鸣声,这表明它在完成要求的操作次数之前就已经到了缓冲区的顶部(无法再向回移动了)。
用于编辑的按键表
我们来总结一下刚才学到了什么。在您继续学习下一部分之前,请看看表 4,它列出了重要的编辑命令和执行这些命令时用的缺省键盘输入。
表 4. 常用 Emacs 编辑命令
键盘输入 |
函数 |
描述 |
Ins |
overwrite-mode |
切换改写模式(缺省为关闭)。 |
Backspace Del |
delete-backward-char |
删除插入点前的字符。 |
C-d |
delete-char |
删除插入点处的字符。 |
M-d |
kill-word |
从插入点开始向前删除字符,直到单词末尾。 |
M-Backspace, M-Del |
backward-kill-word |
从插入点开始向回删除字符,直至单词的开始处。 |
C-_ |
undo |
撤消您的上一次键入或操作 |
C-q 字符 或 XXX |
quoted-insert |
在插入点插入按键本身代表的字符或由八进制数字(XXX)表示的字符。 |
C-u 次数 命令 |
universal-argument |
按总的次数(缺省为 4 次)连续执行命令。 |
标记和鼠标
您正在顺利地学习关于 Emacs 编辑的所有基本知识,但还有一些重要的概念是您需要知道的:如何标记文本区域并在这些区域上执行操作,以及如何使用鼠标。
标记、移除、删除
Emacs 有一项标记文本区域的功能,您可以将这个区域作为一个整体进行编辑:表 5 中对这些命令进行了描述和简要介绍。
标记一个区域
移动到缓冲区的顶部,即诗的第一节的开始处,然后键入 C-Space,方法是按住 Ctrl,再按空格键。这被称为设置标记;迷您缓冲区中会出现一条消息,告诉您已经设置了标记。
插入点和您设置标记的位置之前的部分被称为区域。
将插入点由开始处移动到小节后的空白处,将整个第一小节设置为区域
删除和恢复文本
有些特殊的命令可用来操作区域,包括 C-w,它能删除区域。
键入 C-w,删除您刚才定义的区域。
每次您删除文本时,这些文本都会保存在 Emacs 的 kill ring 中。您可以用 C-y 把它们恢复到插入点。移动到缓冲区的末尾,按 Enter,插入另一个空白行,然后将这个小节移回去。
您不仅能删除区域;使用 C-k 还可以删除从插入点到行末的所有文本。向上移到以 Tiger 开头的一行,然后用 C-k 删除它。注意,这一操作不会删除空白行;还要第二次使用 C-k。按此操作,然后使用 C-y 将整行移回去。如果您用多个删除命令连续进行删除,它们会叠加在一起,只返回一个移除内容。
您可以将某一行恢复任意多次。移动到缓冲区的顶部,然后再次使用 C-y 把它移回去。
您还可连续多次使用 C-k 键盘输入进行删除,删除的内容会被移到一起。请试试一次删除多行,然后使用 C-y 将它们移回原先的位置。
删除和恢复文本
有些特殊的命令可用来操作区域,包括 C-w,它能删除区域。
键入 C-w,删除您刚才定义的区域。
每次您删除文本时,这些文本都会保存在 Emacs 的 kill ring 中。您可以用 C-y 把它们恢复到插入点。移动到缓冲区的末尾,按 Enter,插入另一个空白行,然后将这个小节移回去。
您不仅能删除区域;使用 C-k 还可以删除从插入点到行末的所有文本。向上移到以 Tiger 开头的一行,然后用 C-k 删除它。注意,这一操作不会删除空白行;还要第二次使用 C-k。按此操作,然后使用 C-y 将整行移回去。如果您用多个删除命令连续进行删除,它们会叠加在一起,只返回一个移除内容。
您可以将某一行恢复任意多次。移动到缓冲区的顶部,然后再次使用 C-y 把它移回去。
您还可连续多次使用 C-k 键盘输入进行删除,删除的内容会被移到一起。请试试一次删除多行,然后使用 C-y 将它们移回原先的位置。
删除和恢复文本
有些特殊的命令可用来操作区域,包括 C-w,它能删除区域。
键入 C-w,删除您刚才定义的区域。
每次您删除文本时,这些文本都会保存在 Emacs 的 kill ring 中。您可以用 C-y 把它们恢复到插入点。移动到缓冲区的末尾,按 Enter,插入另一个空白行,然后将这个小节移回去。
您不仅能删除区域;使用 C-k 还可以删除从插入点到行末的所有文本。向上移到以 Tiger 开头的一行,然后用 C-k 删除它。注意,这一操作不会删除空白行;还要第二次使用 C-k。按此操作,然后使用 C-y 将整行移回去。如果您用多个删除命令连续进行删除,它们会叠加在一起,只返回一个移除内容。
您可以将某一行恢复任意多次。移动到缓冲区的顶部,然后再次使用 C-y 把它移回去。
您还可连续多次使用 C-k 键盘输入进行删除,删除的内容会被移到一起。请试试一次删除多行,然后使用 C-y 将它们移回原先的位置。
复制文本
如果您是想复制区域,不必删除它。如果要将区域保存在 kill ring 中而不是删除它,请使用 M-w(而不是 C-w)。
尝试下面的操作:
- 将插入点移到最后一节第二行的开头。
- 键入 C-Space,设置标记。
- 将插入点移到这一节的下面。
- 键入 M-w,将这三行复制到 kill ring,而不是删除它们。
- 将插入点向上移到缓冲区中第一行下的空行。
- 用 C-y 移除这三行。
表 5. 用来标记和删除文本的 Emacs 函数
键盘输入 |
函数 |
描述 |
C-Space |
set-mark-command |
在插入点设置标记。 |
C-k |
kill-line |
删除从插入点到行末的所有文本。 |
C-w |
kill-region |
删除区域。 |
M-w |
kill-ring-save |
将区域保存在 kill ring 中,但不删除它。 |
C-y |
yank |
恢复来自 kill ring 的文本。 |