序言
上篇中介绍了一些基础操作的指令,在这篇文章中,主要介绍一些,我们在编辑文档时,如何更加便利的写文章。
Mark
许多Emacs命令在当前缓冲区的任意连续部分上运行。 要指定用于执行此命令的文本,请将标记设置在其一端,然后将指针移至另一端。 点和标记之间的文本称为区域。 无论文本中的哪一个先出现,该区域始终在点和标记之间延伸。 每次移动点时,区域都会改变。
将标记设置在文本中的某个位置也会激活它。 当标记处于活动状态时,我们也说该区域处于活动状态。 Emacs通过使用区域面部突出显示其中的文本来指示其范围
在执行某些非运动命令(包括更改缓冲区中文本的任何命令)之后,Emacs会自动停用该标记; 这将关闭突出显示。 您还可以随时通过键入C-g显式停用该标记。
setting Mark
C-SPC
:在光标处设置mark点
C-@
:同上
C-x C-x
:不取消当前mark区域改变mark点
M-@
:在下一个单词(mark-word)的末尾设置标记。
C-M-@
: Set mark after end of following balanced expression
M-h
:mark当前段落,调用mark-paragraph
C-M-h
:mark当前defun,调用mark-defun
C-x C-p
:mark当前页面,并将光标移动到页面的开始,调用mark-page
C-x h
:mark当前buffer,调用mark-whole-buffer
Using Region
使用上面的命令可以设置好region,使用下面的命令可以对选中的region做一些操作
- 使用
C-w
,将选中的region剪贴掉 - 使用
M-w
, 复制选中的region使用C-x C-l
,将选中region中的大写字母变成小写 - 使用
M-%
,在选中的区域中做替换,第一次输入是你想替换的字符,第二次输入是你要替换的字符,然后按y可以将匹配到的字符替换。 - 使用
M-x eval-region
,执行选中region中的Lisp code
The Mark Ring
Registers
Registers是emacs中的隔离区,可以将需要重复使用的一些内容放进相应的registers中,之后可以多次使用
Position Registers
操作对象是光标位置
C-x r SPC r
:将当前光标的位置放在register r中,调用point-to-register
C-x r j r
:跳到register r中保存的光标位置,调用jump-to-register
命令最后r可以替换为其他字母
Text Registers
操作对象是线性的region
C-x r s r
:将当前region复制到register r中,调用的是copy-to-register
C-x r i r
:插入register r中的内容,调用的是insert-register
M-x append-to-register RET r
:将当前region增量复制到register r中,插入到后面M-x prepend-to-register RET r
:将当前region增量复制到register r中,插入到前面
Rectangle Registers
操作对象是矩形的region
C-x r r r
:将当前region-rectangle复制到register r中,调用的是copy-rectangle-to-register
C-x r i r
:插入register r中的内容,调用的是insert-register
Configuration Registers
操作对象是frame中不同window的配置
C-x r w r
:将当前region-rectangle复制到register r中,调用的是window-configuration-to-register
C-x r f r
:插入register r中的内容,调用的是frameset-to-register
Number Registers
C-u number C-x r n r
:将number复制到register r中,调用的是number-to-register
C-u number C-x r + r
:将number加上register r中的数字保存到register r中,调用的是increment-register
C-x r i r
:插入register r中的内容,调用的是insert-register
File Registers
使用下面的lisp code将文件名保存到register中,然后调用C-x r j r
打开文件
(set-register r '(file . name))
Keyboard Macro Register
C-x C-k x r
:将当前Keyboard macro复制到register r中,调用的是window-configuration-to-register
C-x r j r
:跳到register r中的内容
Bookmarks
书签有点像寄存器,可以现在多个文件中使用,典型用法是记录在各个文件中读取的位置
C-x r m RET
:设置书签C-x r m bookmark RET
:以bookmark为名字设置书签C-x r M bookmark RET
:类似于C-x r m
,不会覆盖当前的书签C-x r b bookmark RET
:跳转到bookmark命令的书签C-x r l
:列出所有书签M-x bookmark-save
:在默认的bookmark file中保存当前的bookmarkM-x bookmark-load RET filename RET
:加载bookmark fileM-x bookmark-write RET filename RET
:保存新的bookmark到file中M-x bookmark-delete RET bookmark RET
:删除书签M-x bookmark-insert-location RET bookmark RET
: Insert in the buffer the name of the file that bookmark bookmark points to.M-x bookmark-insert RET bookmark RET
:Insert in the buffer the contents of the file that bookmark bookmark points to.
Recuresive Editing Levels
在emacs中命令是可以嵌套的。比如,我在对一个region做替换操作的时候,突然想先查询一个单词,就先执行C-r
去查询,等这个指令执行完之后就会返回替换操作的命令
- 使用
C-M-c
退出递归编辑的模式,会执行第一次输入的命令,调用的是edit-recursive-edit
- 使用
C-]
放弃递归编辑的模式,直接退出,调用的是abort-recursive-edit