vimdiff使用

http://www.ibm.com/developerworks/cn/linux/l-vimdiff/index.html

启动方法

首先保证系统中的diff命令是可用的。Vim的diff模式是依赖于diff命令的。Vimdiff的基本用法就是:

# vimdiff  FILE_LEFT  FILE_RIGHT

或者

# vim -d  FILE_LEFT  FILE_RIGHT

图一就是vimdiff命令的执行结果的画面。

从上图我们可以看到一个清晰的比较结果。屏幕被垂直分割,左右两侧分别显示被比较的两个文件。两个文件中连续的相同的行被折叠了起来,以便使用者能把注意力集中在两个文件的差异上。只在某一文件中存在的行的背景色被设置为蓝色,而在另一文件中的对应位置被显示为绿色。两个文件中都存在,但是包含差异的行显示为粉色背景,引起差异的文字用红色背景加以突出。

除了用这种方法启动vim的diff模式之外,我们还可以用分割窗口命令来启动diff模式:

# vim FILE_LEFT

然后在vim的ex模式(也就是"冒号"模式)下输入:

:vertical diffsplit FILE_RIGHT

也可以达到同样的效果。如果希望交换两个窗口的位置,或者希望改变窗口的分割方式,可以使用下列命令:

1. Ctrl-w K(把当前窗口移到最上边)
2. Ctrl-w H(把当前窗口移到最左边)
3. Ctrl-w J(把当前窗口移到最下边)
4. Ctrl-w L(把当前窗口移到最右边)

其中1和3两个操作会把窗口改成水平分割方式。

回页首

光标移动

接下来试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。如果不想要这个特性,可以设置:

:set noscrollbind

可以使用快捷键在各个差异点之间快速移动。跳转到下一个差异点:

]c

反向跳转是:

[c

如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。比如如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。

回页首

文件合并

文件比较的最终目的之一就是合并,以消除差异。如果希望把一个差异点中当前文件的内容复制到另一个文件里,可以使用命令

dp (diff "put")

如果希望把另一个文件的内容复制到当前行中,可以使用命令

do (diff "get",之所以不用dg,是因为dg已经被另一个命令占用了)

如果希望手工修改某一行,可以使用通常的vim操作。如果希望在两个文件之间来回跳转,可以用下列命令序列:

Ctrl-w, w

在修改一个或两个文件之后,vimdiff会试图自动来重新比较文件,来实时反映比较结果。但是也会有处理失败的情况,这个时候需要手工来刷新比较结果:

:diffupdate

如果希望撤销修改,可以和平常用vim编辑一样,直接

<ESC>, u

但是要注意一定要将光标移动到需要撤销修改的文件窗口中。

回页首

同时操作两个文件

在比较和合并告一段落之后,可以用下列命令对两个文件同时进行操作。比如同时退出:

:qa (quit all)

如果希望保存全部文件:

:wa (write all)

或者是两者的合并命令,保存全部文件,然后退出:

:wqa (write, then quit all)

如果在退出的时候不希望保存任何操作的结果:

:qa! (force to quit all)

回页首

上下文的展开和查看

比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数,可以这样设置:

:set diffopt=context:3

可以用简单的折叠命令来临时展开被折叠的相同的文本行:

zo (folding open,之所以用z这个字母,是因为它看上去比较像折叠着的纸)

然后可以用下列命令来重新折叠:

zc (folding close)

下图是设置上下文为3行,并展开了部分相同文本的vimdiff屏幕:

回页首

结论

在无法使用图形化的比较工具的时候,或者在需要快速比较和合并少量文件的时候,Vimdiff是最好的选择。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、文本文件比较命令diff

1>diff命令的功能

Linux中diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。

2>语法

diff [options] file1 file2
该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用”-”表示file1或file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。

3>[options]主要参数

-a:将所有文件当作文本文件来处理。
-b或–ignore-space-change  忽略空格造成的不同。
-B或–ignore-blank-lines  忽略空行造成的不同。
-c:使用纲要输出格式。
-H:利用试探法加速对大文件的搜索。
-I:忽略大小写的变化。
-n –rcs:输出RCS格式。
-N或–new-file  在比较目录时,若文件A仅出现在某个目录中,会显示:Only in目录;文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
-r或–recursive  比较子目录中的文件。
-u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。

4>使用方法的实例说明

例如: diff /usr/xu mine
把目录/usr/xu 中名为mine的文件与当前目录中的mine文件进行比较。
通常输出由下述形式的行组成:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4 这些行类似ed命令把filel转换成file2。字母(a、d和c)之前的行号(n1,n2)是针对file1的,其后面的行号(n3,n4)是针对file2的。字母a、d和c分别表示附加、删除和修改操作。
在上述形式的每一行的后面跟随受到影响的若干行,以”<”打头的行属于第一个文件,以”>”打头的行属于第二个文件。
diff能区别块和字符设备文件以及FIFO(管道文件),不会把它们与普通文件进行比较。
如果file1和file2都是目录,则diff会产生很多信息。

5>diff最常用的功能

diff有很多功能平时我们不常用到,最常用的功能莫过于生成patch文件了:
diff -urN old/ new/ > mysoft.patch
参数 -u 表示使用 unified 格式,-r 表示比较目录,-N 表示将不存在的文件当作空文件处理,这样新添加的文件也会出现在patch文件中。
然后在需要应用patch的地方使用下述命令即可:
patch -p0 < mysoft.patch
diff的 -y 命令(长格式为 –side-by-side)可以将屏幕分成左右两部分,来比较两个文件之间的差异。许多图形化的比较工具都有这个功能,但如果只能使用命令行,这个参数 就相当有用了。如果要改变左右各部分的宽度,可以通过 -W (–width)参数来指定。
–ignore-blank-lines 参数可以不检查空白行。这样DOS格式和Unix格式的文件互相比较时,就不至于因为换行符不一致而出现大量的差异。

6>diff示例

例1:
diff -Nur linux-2.6.30/Makefile linux-2.6.31.5/Makefile
--- linux-2.6.30/Makefile       2009-06-10 11:05:27.000000000 +0800
+++ linux-2.6.31.5/Makefile     2009-10-23 06:57:56.000000000 +0800
@@ -1,7 +1,7 @@  PATCHLEVEL = 6
-SUBLEVEL = 30
-EXTRAVERSION =
+SUBLEVEL = 31
+EXTRAVERSION = .5 NAME = Man-Eating Seals of Antiquity# *DOCUMENTATION*   

‘-’号为旧,'+'号为新 ,这句的意思是:比较范围:从旧的源码的第1行开始的7行到新的源码的第1行开始的7行。

例2:

diff -Nur linux-2.6.30/arch/alpha/include/asm/bitsperlong.h linux-2.6.31.5/arch/alpha/include/asm/bitsperlong.h
--- linux-2.6.30/arch/alpha/include/asm/bitsperlong.h    1970-01-01 08:00:00.000000000 +0800
+++ linux-2.6.31.5/arch/alpha/include/asm/bitsperlong.h    2009-10-23 06:57:56.000000000 +0800
@@ -0,0 +1,8 @@
+#ifndef __ASM_ALPHA_BITSPERLONG_H
+#define __ASM_ALPHA_BITSPERLONG_H
+
+#define __BITS_PER_LONG 64
+
+#include <asm-generic/bitsperlong.h>
+
+#endif /* __ASM_ALPHA_BITSPERLONG_H */

如果是0,则说明文件不存在

二、二进制文件比较命令cmp

用途

比较两个文件的内容并报告不同的第一个字符。

语法

cmp [ -l | -s ] File1 File2

描述

cmp 命令比较 File1 和 File2 参数指定的文件,并将结果写到标准输出。如果为 File1 或 File2 参数指定 -(减号),则 cmp 命令读取该文件的标准输入。只可以从标准输入读取一个文件。在缺省条件下,如果文件相同,则 cmp 命令不显示任何内容。如果它们不同,则 cmp 命令显示发生不同的第一个字节数和行数。如果指定了 -l 标志,并且如果一个文件是另一文件的初始后继(即,如果在查找任何差别之前,cmp 命令读取文件中的文件结束符),则 cmp 命令记下它。通常,使用 cmp 命令比较非文本文件,使用 diff 命令比较文本文件。

标志

-l     对于每个不同,(小写字母 L)显示十进制的字节数和八进制的不同字节。
-s     只返回退出值。值 0 指示相同的文件;值 1 指示不同的文件;值 2 指示不可访问的文件或缺少选项。
退出状态
该命令返回以下退出值:
0     文件相同。
1     文件不同。即使一个文件是另一个文件的初始后继(一个文件与另一个文件的第一个部分相同),也给出该值。
>1     发生错误。

示例

1. 要确定两个文件是否相同,请输入:
      cmp prog.o.bak prog.o
      这比较 prog.o.bak 和 prog.o。如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;例如:
      prog.o.bak prog.o differ: char 4, line 1
      如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。
   2. 要显示不同字节的每个对,请输入:
      cmp -l prog.o.bak prog.o
      这比较文件,然后显示字节数(使用十进制格式)和每个不同的不同字节(使用八进制格式)。例如,如果第五个字节在 prog.o.bak 中是八进制 101,在 prog.o 中是 141,则 cmp 命令显示:
      5 101 141
   3. 要比较两个文件,而不写任何消息,请输入:
      cmp -s prog.c.bak prog.c
      这样,如果文件相同,则给出值 0,如果不同,则给出值 1,或者如果发生错误,则给出值 2。该命令形式通常用在 shell 步骤中。例如:
      if cmp -s prog.c.bak prog.c
      then 
      echo No change
      fi
      如果两个文件相同,则该部分的 shell 步骤显示 No change。

linux-vimdiff,diff,patch,cmp:文件比较相关推荐

  1. linux下比较文件并输出,Linux使用diff命令比较文件找出文件之间相同的部分

    如果你需要比较系统文件的内容,那么你就会是使用到diff命令,可找出文件之间相同的部分,下面小编就给大家详细介绍下Linux diff命令的用法. diff 命令是 linux上非常重要的工具,用于比 ...

  2. linux下比较文件并输出,Linux使用diff命令比较文件的方法

    如果你需要比较系统文件的内容,那么你就会是使用到diff命令,可找出文件之间相同的部分,下面小编就给大家详细介绍下Linux diff命令的用法. diff 命令是 linux上非常重要的工具,用于比 ...

  3. linux git diff patch,拿到git patch要怎麼用一般patch指令merge?

    如果你的codebase工作環境沒有使用git作管理, 你要怎麼做從git產生的patch呢? 首先要先知道diff 與 patch 的關係, 傳統的linux裡面, .patch檔案是透過diff產 ...

  4. linux利用patch和diff命令制作文件补丁

    linux利用patch和diff命令制作文件补丁 因为在 u-boot 移植过程中,有几处通用文件要修改,如果每次都要手动修改就太麻烦了.制作补丁可以解决这个问题. 学习资料的收集比较简单,方法一类 ...

  5. linux diff 补丁文件夹,LINUX下制作补丁文件 diff,patch

    diff(differential) 功能说明:比较文件的差异. 语 法:diff [-abBcdefHilnNpPqrstTuvwy][-;][-C ;][-D ;][-I ;][-S ;][-W ...

  6. Linux的diff和git diff生成patch/打patch

    一.Linux的diff生成patch和打patch 1.单个文件生成patch #  diff -up xxx/a.txt yyy/b.txt  > mypatch_1 参数解释: -u:显示 ...

  7. linux -- patch补丁文件以及相关内容

    本文的目的是向Linux新手介绍一种无价的资源,Larry Wall的patch程序.patch是用来查找文件之间差异的GNU diff命令的一个接口:diff有很多选项,但是该命令最常用的用途是用来 ...

  8. Linux使用diff对比文件差异,生成补丁,patch打补丁

    目录 1.概述 2.使用diff对比单个文件差异 3.diff命令常用选项: 4.使用patch命令对单文件代码打补丁 5.对比目录中所有文件的差异 1.概述 程序是人设计出来的,总是会有这样那样的问 ...

  9. Linux入门时必学文件处理个命令

    Linux系统信息存放在文件里,文件与普通的公务文件类似.每个文件都有自己的名字.内容.存放地址及其它一些管理信息,如文件的用户.文件的大小等.文件可以是一封信.一个通讯录,或者是程序的源语句.程序的 ...

最新文章

  1. SylixOS与硬件设备连接问题——硬件设备串口、网口连接问题
  2. excel排名_WPS-Excel表格实用技巧——排位排名函数(RANK函数)的使用
  3. 【炼数成金 NOSQL引航 三】 Redis使用场景与案例分析
  4. MQTT服务器搭建和测试步骤及遇见的问题
  5. windows进入后自动注销处理
  6. pandas的dataframe
  7. unity3d Md5打包与版本更新
  8. 如何用python解码base32/base64
  9. SQL中的Round函数
  10. 总结:Linux目录之/dev
  11. Unity-创建一个小地图
  12. 小觅双目相机如何使用_小觅双目相机测试
  13. 微信无法打开xlsx文件_微信打不开文件怎么办显示excel丢失或损坏
  14. 【GreenDao学习笔记】SQLite数据库保存float/double小数类型精度丢失
  15. 云服务器架设大话西游2,端游[大话西游]天演册虚拟机镜像一键启动服务端+客户端+GM工具等...
  16. 2013房价必然拉开大崩溃的序幕
  17. 001简谱的调号、拍号和情绪
  18. 为MacTex配置Ctex环境
  19. kafka-13-windows中安装kafka
  20. Android 自定义底部上拉控件的实现

热门文章

  1. 地理坐标系VS大地坐标系
  2. SSR解决了什么问题?
  3. 【Undertale-传说之下】-中文补丁汉化steam
  4. Python编程基础题(26-家务分配问题)
  5. 2021年化工自动化控制仪表及化工自动化控制仪表模拟考试
  6. 开年新书热销榜 TOP10
  7. 让你的 CDN 费用省 50% 以上!图片瘦身的正确姿势
  8. Java乐观锁%悲观锁
  9. Java为什么要写get和set方法多此一举呢?
  10. byte[]与String互转对象和JSON相互转