以下中,C表示Control键,M表示Alt键(Mac为ESC键)
移动等常用操作
C-f 向右移动一个字符
C-b 向左移动一个字符
M-f 向右移动一个词【对中文是移动到下一个标点符号】
M-b 向左移动一个词【对中文是移动到上一个标点符号】
C-n 移动到下一行
C-p 移动到上一行
C-a 移动到行首
C-e 移动到行尾
M-a 移动到句首
M-e 移动到句尾
请注意 C-f 、C-b 和 M-f 、M-b 两对之间的类比关系。通常的惯例是:CONTROL系列组合键用来操作“与语义无关的基本单位(比如字符、行等等)”,而META 系列组合键用来操作“与语义有关的单位(比如词、句子、段落)” 。
【补充:跳到某一行:M-g g 200 跳到200行
跳行自定义快捷键的可在.emacs文件中添加以下一行:
(define-key ctl-x-map "l" 'goto-line)
然后每次在emacs中按C-x再按l,输入指定的行号就可以了。】
同样地有:
<Delback> 删除[delete]光标前的一个字符(此处使用Del键本身设计的功能,不需Control键)
C-d 删除[delete]光标后的一个字符
C-k 移除[kill]从光标至行尾的字符
M-<Delback> 移除[kill]光标前的一个词
M-d 移除[kill]光标后的一个词
M-k 移除[kill]从光标至句尾的字符
这里移除是指那些文字会被移到剪贴板(某块内存)中保存起来,事后是可以yank(召回)的;而那些删除掉的则是被抛弃了,将无法被召回。一般对于文字内容较多的,都设计为可召回的,对于单个字符则是直接抛弃的。
进一步地还有:
C-@ 标记当前位置(作为选取区域的起始位置)
M-@ 标记当前位置所在的单词尾部,再次使用可以选取到下一个单词尾(中文里的单词是两个标点符号间的文字)之间的部分,也即是下一个单词的整体
M-h 选取光标位置的一段文本
M-x transient-mark-mode 可以使被选中的区域高亮显示,再次使用即取消高亮功能。
剪切:C-w (等同于M-x clipboard-kill-region)
复制:M-w (等同于M-x clipboard-kill-ring-save)
粘贴:C-y (等同于M-x clipboard-yank)
显示多窗口
测试以下命令:
[>> C-u 0 C-l] //使光标所在行为本页第一行
>> C-h k C-f //观察当一个新窗格出现时当前窗格(用来显示CONTROL-f 命令的文档)是如何缩小的。
>> C-x 1 //关掉文档窗格,只保留一个窗格――就是我们正在编辑的这个。
>> C-x 0 //关闭当前窗口(delete-window)
用下面的方法可以在一个新开窗格里打开文件:
>> 输入 C-x 4 C-f,紧跟着输入一个文件名,再用 <Return> 结束。
可以看到你指定的文件出现在下方的窗格中,同时光标也跳到了那里。
>> 输入 C-x o 回到上方的窗格,然后再用 C-x 1 关掉下方窗格。
光标在窗口间切换:1. 重复输入C-x o;
2. M-x windmove-right 就是移到右边那个窗口,对应的"left","up“, "down",向四个方向都能移。
C-M-v 命令就是用来滚动另一个窗口的文本(Mac下先按一下Esc,再按C-v),这个是往下翻页,C-M-S-v 是往上翻页。
退出
永久退出Emacs用C-x C-c
暂时将Emacs挂起退到shell但并不退出Emacs用C-z,恢复时可先用jobs命令查看后台工作人物列表,用fg %job_no恢复该工作,如fg 1;也可以用%emacs命令。
undo
C-_ 也是撤销命令;它的作用跟 C-x u 一样,虽方便重复输入,但在有的键盘可能会不好按。
文件存储
C-x C-s 储存这个文件
这条命令把 Emacs 中的文字存储到文件中。第一次存盘的时候 Emacs 会将原文件重命名以备份。重命名的规则通常是在原文件名之后添加一个“~”字符。
【对许多人来说,这是一个烦人的特性,关掉文件备份可以用如下命令:
M-x customize-variable <Return> make-backup-files <Return>】
你不但可以寻找一个已有的文件来查看或编辑,还可以寻找一个不存在的文件。实际上这正是 Emacs 创建新文件的方法:找到不存在的新文件。只有在存盘的时
候,Emacs 才会真正创建这个文件。而在这之后的一切就跟编辑一个已有文件没有区别了。
查找
1. 增量查找(I-Search,边输入边找)
C-s 正向查找,再次C-s/C-r则会向前/向后跳至下一个匹配位置()
C-r 反向查找
在输入C-s后,使用M-n和M-p可以调出查找环中上一个和下一个查找的内容。虽然这个也叫环但它是个标准的队列,有头有尾不会循环。
2. 简单查找(Search):即在出现I-Search:提示符后直接按回车;
3. 词组查找 (word search) : M-s w (等同于M-x word-search-forward/word-search-backward)
4. 正则式查找:C-M-s
替换
1. M-x repl s<Return>changed<Return>altered<Return> //将出现changed之处替换为altered
2. M-% (query-replace) //每次替换前会征询意见
恢复自动保存的文件:
M-x recover file<Return> //自动保存文件是原文件名基础上,首尾添加#号的文件。后需输入yes表确认
缓冲区
C-x C-b 列出缓冲区,左侧有个"."标识的是当前缓冲,%表示是只读缓冲,*表示缓冲已经被修改过了
>> 输入 C-x b foo <Return> 以回到文件“foo”的缓冲区 //等同于使用C-x C-f
C-x k buffer 关闭指定的缓冲(kill-buffer)
C-x C-q 切换当前缓冲的只读属性(toggle-read-only)
* 状态栏(MODE LINE)
---------------------
位于回显区正上方的一行被称为“状态栏”。状态栏上会显示一些信息,比如:
--:** TUTORIAL.cn (Fundamental)--L670--54%----------------
状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。
-NN%-- 显示的是光标在全文中的位置。如果位于文件的开头,显示 --Top-- 而不是 --00%--;如果位于文件的末尾,就显示 --Bot--。如果文件很小,一屏就足以显示全部内容,那么状态栏会显示 --All--。
“L” 和其后的数字给出了光标所在行的行号。
最开头的星号(*)表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动过,所以状态栏上显示的不是星号而是短线(-)。
状态栏上小括号里的内容告诉你当前正在使用的编辑模式。缺省的模式是Fundamental,就是你现在正在使用的这个。它是一种“主模式”。
Emacs 的主模式林林总总。有用来编辑程序代码的――比如 Lisp 模式;也有用来编辑各种自然语言文本的――比如 Text 模式。任何情况下只能应用一个主模
式,其名称会显示在状态栏上,也就是现在显示“Fundamental”的地方。
主模式通常会改变一些命令的行为。比方说,不管编辑什么语言的程序代码,你都可以用一个相同的命令来添加注释。但是在不同的语言中注释的语法往往是不
同的,这时不同的主模式就会用各自不同的语法规则来添加注释。主模式都是可以用 M-x 启动的扩展命令,M-x fundamental-mode 就可以切换到 Fundamental
模式。
编辑自然语言文本――比如现在――应该用 Text 模式。
>> 输入 M-x text mode<Return>。
用 C-h m 可以查看当前主模式的文档。
>> 用 C-u C-v 将本行带到屏幕的最上方。
>> 输入 C-h m,看看 Text 模式与 Fundamental 模式有哪些不同。
>> 输入 C-x 1 关掉文档窗格。
有一个叫做自动折行(Auto Fill)的辅模式很有用,特别是在编辑自然语言文本的时候。启用自动折行后,Emacs 会在你打字超出一行边界时自动替你换行。
启动自动折行模式: M-x auto fill mode<Return> (重复一次相同的命令可关闭它)
行边界通常被设定为 70 个字符【这里指英文字符】,你可以用 C-x f 命令配合数字参数来重新设定它。测试步骤如下:
>> 输入 C-x f 并传递参数 20: C-u 2 0 C-x f。
然后输入一些文字,观察 Emacs 的自动折行动作最后再用 C-x f 将边界设回 70。
帮助
输入 C-h c 之后再输入一个组合键,Emacs 会给出这个命令的简要说明。
想得到更多的信息,请把 C-h c 换成 C-h k。
C-h f 解释一个函数。需要输入函数名
C-h v 用来显示 Emacs 变量的文档
C-h a 相关命令搜索(Command Apropos)。输入一个关键词然后 Emacs 会列出所有命令名中包含此关键词的命令。这些命令全都可以用 M-x 来启动。对于某些命令来说,相关命令搜索还会列出一两个组合键。
快速复制
有的时候我们可能会想把一段内容临时保存在一个地方可供单独编辑或者以后使用,很明显kill 环(kill ring)不是个好地方,那新建立一个文件呢?kill 环反正也是全局的,通过它来进行复制。这个办法是不错,不过步骤稍显多了点,Emacs为了解决这种问题提供了下面几个命令:
append-to-buffer 将区域中内容加入到一个buffer中。
prepend-to-buffer 将区域中内容加入到一个buffer中,不过加入位置在该buffer的光标前。
copy-to-buffer 将区域中内容加入到一个buffer中,删除该buffer原有内容。
insert-buffer 在该位置插入指定的buffer中所有内容。
append-to-file 将区域中内容复制到一个文件中。
这些命令都只能通过M-x 来调用,而且基本都需要选中一个区域再进行操作,作用都很好理解,这里就不详细说了。
块注释
选中区域,M-x comment-region