BBS水木清华站∶精华区
文件的移动与拷贝
变换文件在缓冲区出现的位置称为搬移(在缓冲区的其它地方重复出现
称为拷贝( Copy)。
前已论及放於 kill-ring 的文件,可在需要时拿出来使用,
此动作称为 yank\indexyank 。使用 yank 的方法
很简单,只要键入 ``Ctrl-x y''即可。使用此方法可将某特定区块的文件
做「搬移」的动作,只是所需的步骤比较烦琐而已。首先将要搬移的文件
重复以 `` Ctrl-x k'' 的指令,将其放入 kill-ring 中,再将 point
移至文件欲搬移的位置,以 `` Ctrl-y'' 将其 yank 出来。
「拷贝」一个区块的方法与「搬移」一个区块的方法累同,唯一
不同是要执行二次 yank 。第一次使用 yank,是将删除的
原文件再放回被删除的位置,第二次使用 yank 是做拷贝的动作,
也就是将 kill-ring 的文件放入要拷贝的地方。
以上的方法当然可以用来做搬移和拷贝之用,但如要搬移和拷贝的文件
有数十甚至数百数千列,岂不要重复 `` Ctrl-k'' 的动作数十甚至数百数千次。
因为 `` Ctrl-k'' 基本上是删除列的指令,当然删除列的指令,可以配合
numeric argument。但在使用数值引数之前还必需确定所欲搬移或拷贝的确实列数,
如此一来岂不使事情愈来愈复杂呢?所以,要搬移与拷贝文件最好的方法,
就是使用标记与区块。下面所谈的是针对区块的搬移与拷贝的方法。
不论搬移或拷贝,只要触及区块的使用,首要之事就是先把区块标示出。
区块定好之後,要搬移就以 `` Ctrl-w'', 将整个区块删除之後,再以
`` Ctrl-y'' 将其 yank 出来。要拷贝则以 `` Meta-w'' 将区块的内容
拷贝一份放在 kill-ring 中,尔後再以
`` Ctrl-y'' 将其 yank 出来。现说明搬移与拷贝的实际操作过程。
o 不设定区块,以删列的方式,将文件一列列先删除後,再 yank 出来。
此法可搬移与拷贝 kill-ring 内的文件。
1. 重复执行 `` Ctrl-k''(删除文件,可使用 numeric argument)
2. Ctrl-y(将放置在 kill ring 中的文件,yank 至缓冲区内。)
+ 若做搬移的动作,只需使用一次 yank。
+ 若做拷贝的动作,则要使用二次的 yank。
o 以设定区块的方式,「搬移」区块的文字。
1. Ctrl-@(设标记,也就是设定区块的起始值)
2. 移动游标以便设定 point的位置(设定区块的终点)
3. Ctrl-w(删除所标示的区块)
4. 移动游标至要搬移的位置(确定文件搬移处)
5. Ctrl-y(将放置在 kill ring 中的文件,yank 至缓冲区内。)
o 以设定区块的方式,「拷贝」区块的文字。
1. Ctrl-@(设标记 (mark))
2. 移动游标以设定 point的位置(设定区块的终点)
3. Meta-w(不删除标示区块的内容,将此内容拷贝至 kill-ring 中)
4. 移动游标至要拷贝的位置(确定文件拷贝处)
5. Ctrl-y(将放置在 kill-ring 中的文件,
yank 至缓冲区内。)
为了更清楚搬移与拷贝後的真实结果,现举实例来说明。
实例:现有二段文件,第一段文字是做搬移与拷贝用的,
第二段文字是用来接收搬移後的文字。
第一段:标记设在第一列的 A 处,而 point设在 B 的地方。
1111111111A22222222222
3333333333333333333333
4444444444444444444444
55555B5555555555555555
第二段: point在 Y 处
00000Y0000000000000000
0000000000000000000000
0000000000000000000000
结果一、将第一段的文件搬移至第二段,搬移後的游标仍在 Y 处。
1111111111B5555555555555555
00000A22222222222
3333333333333333333333
4444444444444444444444
55555Y0000000000000000
0000000000000000000000
0000000000000000000000
结果二、将第一段的文件拷贝至第二段,搬移後的游标仍在 Y 处。
1111111111A22222222222
3333333333333333333333
4444444444444444444444
55555B5555555555555555
00000A22222222222
3333333333333333333333
4444444444444444444444
55555Y0000000000000000
0000000000000000000000
0000000000000000000000
执行搬移与拷贝的动作时, EMACS 所采取的一律是
insert-mode。此时,即使设定为覆盖( overwrite-mode),
覆盖的效果也会暂时失效。
区块的□围以标记(mark)为起始值,以 point所在位置之前
的字元做结束。所以,从以上的实例可以很清础的看到,搬移或拷贝之後
的文件会包括标记所在的字元,但不会包含 point所在的字元。
搬移或拷贝的文件会出现在 point之前,原先所有的文件会向後移动,
此时的 point仍在移动前的字元处。
区块是以标记为开始而以 point为终点所构成的。标记与
point所在的列,可能包含所在列的一部分,其它区块所包含的列都是完整的
一列。若搬移或拷贝的□围,为文件中某一个长方形的区域,那该如何来设定
其□围呢?设定好的□围又该如何来操作呢? EMACS 对於这种形状的区域有其它
的处理方式,称为长方形的区块 ( rectangle region)。
设定长方形( Rectangle)的方法与设定区块( Region)的方法是一样的
,只是在理解上有所不同。长方形设定的方法,也是设定二个标记,
此两个标记位於长方形相对的两个直角上。所以,设定了左上角,
另一个标记一定要设在右下角;反之,如果设定了右上角,另一个标记就一定
要在左下角了。。此所设好的长方形, EMACS 称为 rectangle 。
长方形与区块的设定方法是一样,所以单从设定标记与 point的方式
,是无法辨识二者的差别的。要知是使用区块或长方形,只有等到使用运作
於此□围的指令时才会知道。
若是以删除长方形的指令将长方形的区块删除时,此时删除掉的长方形文件
并不放在 一般的 kill-ring 中,而是放於别的地方。因为删除长方形的
运作方式与删除区块的方式不同,所以将长方形删除後的内容,与放置区块
删除後的内容分隔,以便管理。
长方形运作的种类与区块运作的种类累同,可分为二大类,一类
为删除与插入,另一类则专门用来处理空白。
删除长方形可以采取摒弃的方式
( Ctrl-x r d)或将其储存於某处( Ctrl-x r k),以利事後的 yank
( Ctrl-x r y) (yank-rectangle)。
删除掉的长方形资料的保存,只能保留最新删除的资料,所以只有最新
删除掉的长方形资料,才可以被 yank 出来。
长方形区块的运作种类,除了能将资料做删除与搬移外,还可以
在文件的某处加入固定区域的空白。因为从事编辑时,常需要在某一
区域加入一些空白( Ctrl-x r o)(open-rectangle)。
例如在文件加上空白做为边缘(margin);制作图表时留些空白;或将
某一区域的文件以空白取代( Meta-x clear-rectangle)等等。长方形
的运作与区块的运作最大不同处在於,无法直接做拷贝的动作,若要拷贝
必需先删除後再执行二次的 yank。现在就说明长方形区域的用法。
o 长方形区域的 yank 方法
1. Ctrl-@(设定长方形区域的第一个对角)
2. 移动 point至第二个对角处(设定长方区域的第二个对角)
3. Ctrl-x r k(kill-rectangle)
删除设定好的长方形,以便 yank 使用。
4. 移动 point到要 yank 的地方。
5. Ctrl-x r y(yank-rectangle)
将删除的长方形,从储存处取出。
o 永远删除长方形的内容
1. Ctrl-@(设定长方形区域的第一个对角)
2. 移动 point至第二个对角处(设定长方区域的第二个对角)
3. Ctrl-x r d(delete-rectangle)
删除设定好的长方形区域。此删除不会储存在某一定地方。换言之,
一旦摒弃此区域,就无法将其唤回,除非使用 undo 的指令。
o 在长方形区域内插入空白,原文件向前(右)移动。
1. Ctrl-@(设定长方形区域的第一个对角)
2. 移动 point(设定长方区域第二个对角)
3. Ctrl-x r o(open-rectangle)
填入空白在设定好的长方形区域内。此时区块内的文字会自动往右
移动。使用 overwrite mode,原有的文件也不会被加入的空白覆盖。
o 将设定的长方形区域以空白覆盖
1. Ctrl-@(设定长方形区域的第一个对角)
2. 移动 point至第二个对角处(设定长方区域第二个对角)
3. Meta-x clear-rectangle
将此长方形区块内的文件以空白取代。
o 在设定的长方形区域内填充某一类型的字串。
此方法常可用在程式的撰写或测试上。例如,测试
``.emacs'' 程式时,常因测试的过程中,需要将设定做增减的工夫,
使用此方法可以随时将测试条件做增减。
1. Ctrl-@(设定要填充字串的起点)
2. 移动 point至第二个对角处(设定要填充字串的终点)
3. 键入 Meta-x string-rectangle RET ,此时 echo area 会出现
String rectangle:
利用 minibuffer 键入要填充的字串,即可将字串填入长方形区内。
值得注意的是,此时长方形的宽度由字串的宽度来决定,
Ctrl-@ 与 point只用来决定长方形的长度。
BBS水木清华站∶精华区