Chinaunix首页 | 论坛 | 博客
  • 博客访问: 130016
  • 博文数量: 47
  • 博客积分: 3000
  • 博客等级: 中校
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-30 12:26
文章分类
文章存档

2010年(32)

2009年(15)

我的朋友

分类: LINUX

2010-04-12 16:51:31

[Emacs]Ediff简介
 2
 3     Ediff 是 Emacs 提供的一种实时浏览文件间不同(diff)的工具,它可以比较两个或
 4 三个文件间的不同,分别表示为 file-A, file-B 或 file-C, 也可以比较两个或三个
 5 emacs-buffer间的不同了。 Ediff的另一个强有力特性则是可以把正的比较的文件合并成
 6 第三个文件。 另外, Ediff还可以对目录进行操作。
 7
 8     与diff程序的比较,Ediff提供的实时浏览编辑功能为两文件之间的“局部同步”(个
 9 人使用的术语,指仅进行文件中某些区域的同步,呵呵)提供了可能。 如果使用diff程序
10 进行文件比较,然后对其输出文件进行一些编辑再使用patch,虽然也可能完成某些要求的
11 同步,但更可能引起补丁失败,因为在对“不同”进行编辑时可能就影响了生成文件的中
12 内容行号,那么在patch的时候就可能失败(这部分只是一些失败加上部分猜测,没有仔细
13 去琢磨过,可能是本人用得不对:(.)。
14
15     Ediff浏览文件的差异是在Emacs的两个Buffer上进行,分别使用不同的颜色表示所
16 存在的差异,而且Ediff对差异区域的差异进行了“细化”,diff程序只进行到“行”级别
17 比较,而Ediff则是基于diff程序的输出上,对差异区域进行更细致的比较,从而得到区域
18 内“单词”级别上的差异比较。从而使比较文件间的细致不同更加容易。
19
20     Ediff的更强功能:Ediff可以“忽略”某些细微的差别,例如有两个程序几乎相同,
21 但是其中都些变量的命名却不一样,如bar变量在另一个程序中却都foo,这对程序而言是
22 “相同”,如果用一般的diff程序来查看该两程序的差别,则这种没有意义的变量名不同
23 将充满了整个差异输出,从而不易找到真正的“程序不同”,而使用Ediff则可以忽略这类
24 不同,很容易就定位我们真正想要的差异。
25
26     21以上版本的Emacs已经内置了Ediff程序包,无需另外安装了。 Ediff主要提供了
27 如下这些命令:
28
29 1, 比较两文件: ‘M-x ediff-files’‘M-x ediff’(以后略去M-x)
30 2, 比较两个Buffer: ‘ediff-buffers’
31 3, 比较三个文件: ediff-file3  ediff3
32 4, 比较三个Buffer: ediff-buffer3
33 5, 交互式使用一个patch: ediff-patch-file  epatch
34
35 以上是一些主要的命令,这些命令在运行时可能会提示输入一些参数,如文件名等,同时
36 都能很智能地提供一些合适的默认值。
37
38     Ediff命令被执行后,进行所谓的‘Ediff Session’它接受一些Ediff命令以决定
39 Ediff的行为。具体的表现是Ediff另外建立一个窗口(称为“Quick Help window”),
40 当聚焦在该窗口输入则被认为是Ediff命令,否则仍是一般的Emacs编辑行为,即还可以
41 实时的编辑你正在比较的文件或Buffer。
42
43     在“Quick Help window”上输入“?”使该窗口变大或是缩小,输入q并确认则
44 完成比较退出Ediff Session。
45
46
47     极常用的 Session Command:
48
49   移动命令:
50 1, v ( V )
51       把文件-A,文件-B,文件-C(如果有),同步向下(向上)滚动,
52 2, < ( > )      
53       把文件-A,文件-B,文件-C(如果有),同步向左(向右)滚动,
54
55 3, j
56       跳到差异区域,可以先加数值参数,如 ‘3j’则跳到第三个差异区域,‘j’则
57       跳到第一个差异区域, 则‘-2j’跳到倒数第二个差异区域。
58       跳到某区域后,再输入的编辑命令就是针对该区域执行,即有一个“当前区域”的
59       概念,而‘j’命令则就是用于使用绝对参数设置当前活动区域。
60 4, n (或 SPC 空格)
61       跳到下一个差异区域,并设其为当前区域,
62 5, p (或 DEL)
63       跳到前一个差异区域,并设其为当前区域,
64
65 6, ga ( gb gc )
66       根据光标在Buffer-A(或Buffer-B, Buffer-C)中的位置,设置一个离它们最近
67       的差异区域为当前活动区域
68
69   编辑命令:
70 7, a
71       比较模式: 把Buffer-A的内容复制到Buffer-B,可以使用‘rb’恢复Buffer-B的
72                内容,
73       合并模式: 把Buffer-A的内容复制到合并Buffer. 可以使用‘r’恢复旧内容,
74 8, b
75       比较模式: 把Buffer-B的内容复制到Buffer-A,可以使用‘ra’恢复Buffer-A的
76                内容,
77       合并模式: 把Buffer-B的内容复制到合并Buffer. 可以使用‘r’恢复旧内容,
78 9, ra ( rb  rc )
79       分别用于恢复 Buffer-A Buffer-B Buffer-C 差异区域中的被修改的内容。
80
81   专用的三方比较的编辑命令(命令10到15)
82 10, ab
83       把Buffer-A的内容复制到Buffer-B,可以使用‘rb’恢复Buffer-B的内容,
84 11, ac
85       把Buffer-A的内容复制到Buffer-C,可以使用‘rc’恢复Buffer-C的内容,
86 12, ba
87 13, bc
88 14, ca
89 15, cb
90       分别把Buffer-B(C)的内容复制到相应的Buffer-ABC,同时仍可以使用‘ra(bc)’
91       恢复相应的被修改的内容。
92
93   Buffer属性设置命令:
94 16, A ( B C )
95       改变Buffer-A, buffer-B, buffer-C的只读属性,是Toggle命令。
96
阅读(2036) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~