学习了一段时间的Vim,直到最近才发现Vim的diff功能是如此方便,对比代码变化再也不用到处去找diff软件或者依靠版本控制的diff了。强大的Vim。

下图是我在macVim中的diff效果。

下面是vimdiff的常见用法,总结了一下,不仔细看一遍手册,在各种场景下还真不一定能马上想到最合适的命令。

在终端中直接以diff模式打开Vim:

 vimdiff file1 file2 [file3 [file4]] #或者
vim -d file1 file2 [file3 [file4]]
 

使用GUI(gVim)的话:

 gvimdiff file1 file2 [file3 [file4]]

 #或者

 vim -d -g file1 file2 [file3 [file4]]

mac用户使用macVim的话如下,这是vim doc中没有提到的:

 mvim -d -g file1 file2 [file3 [file4]]

上面的操作将会用vertical分割的方式打开文件进行diff,如果要使用水平分割,可以加入参数-o

 vimdiff -o file1 file2

 #或者如下,gvim和macvim类推

 vim -d -o file1 file2

前面是使用diff模式直接打开Vim的方法,如果已经在Vim中要启用diff模式,则使用以下命令:

 :diffs[plit] {filename} #在当前窗口分割,载入另一个文件filename进行diff

 :difft[his] #将当前文件加入diff

 :diffp[atch] {patchfile} #将buffer中的文件载入当前窗口进行diff
 

以上操作都可以加入 vimdiff 的其他 -options。

如果在载入文件时要使用纵向分割,可以加上vert前缀命令:

 :vert diffs file2.txt
 

文件改动后,要刷新diff,可以使用diffupdate命令

 :diffu[pdate] #更新diff

 :diffu[pdate] ! #对所有文件更新diff

在diff中的跳转:

 ] c #下一个不同
[ c #上一个不同

在diff模式中,要关闭diff模式返回正常模式,可以使用diffoff命令:

 :diffo[ff] #将目前文件退出diff模式

 :diffo[ff]! #将目前窗口中的所有文件退出diff模式

以上就是常用的vimdiff命令和方法,还有很多复杂的命令没有研究和列举,例如diffexpr, diffcopying 等等,功能就更加强大了。

在版本文件中随意切换、diff和跳转查看变更,在Vim中就是如此简单!

vimdiff: 使用Vim中强大的文件diff功能[转]的更多相关文章

  1. VIM学习笔记 比较文件(diff)

    比较 可以从命令行调用以下命令,来打开两个文件进行比较: vim -d file1 file2 如果已经打开了文件file1,那么可以在Vim中用以下命令,再打开另一个文件file2进行比较: :di ...

  2. vim中处理重定向文件中的^H和^M

    做实验的时候会把日志重定向写到文件中,方便以后查看.但是用vim打开之后出现很多^H和^M,就像乱码一样.如图所示: 现在尝试在vim中解决这个问题. 替换^H 在vim中输入命令,表示把^H替换成空 ...

  3. Vim中的swp文件,在vim非正常退出时,再次编辑会出问题

    vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是data,那么swp文件名就是.data.swp.如果文件正常退出,则此文件自动删除.以下两种情况不会删除swp文件: V ...

  4. vim中的加密文件

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sxhelijian/article/details/32911665 用vim编辑程序. 要连续输入 ...

  5. vim中利用swp文件进行恢复

    经常电脑因为没电或者强行关闭vim,会导致原文件没有保存, 这种情况下vim会自动保存一个.swp文件,需要恢复时, 使用vim -r filename 期中-r意思为recovery 恢复之后最好删 ...

  6. 学会了vim中的自动补全功能

    好开心,再也不用再多个工具之间切换了,哈哈 擦,功能太弱

  7. vim中^M的研究

    vim打开文件时在行尾显示^M,这样的情况时不时会遇到,下面稍微深入了解下这个问题: 原理呢,其实很简单:Windows换行风格(也叫dos风格)的文本以Unix风格解析就会出现这个情况: 首先重现这 ...

  8. vim 中查询和转换编码

    vim中查询修改文件编码格式 set fileencoding 查看现在文本的编码 :set fenc=编码 转换当前文本的编码为指定的编码 :set enc=编码 以指定的编码显示文本,但不保存到文 ...

  9. vim中.swp文件处理

    参考: http://blog.csdn.net/lingdxuyan/article/details/4993868 http://www.cnblogs.com/softwaretesting/a ...

随机推荐

  1. Scala学习笔记--xml

    http://blog.csdn.net/beautygao/article/details/38497065 https://github.com/scala/scala-xml http://st ...

  2. php 和 apache的关系

    例如在客户端游览器输入他也回把这个地址传送到192.168.1.100里的apache里的,apache一看你传过来的是Php文件,如果在服务器没装php的情况下,他也会把这个文件打开,把里面的代码全 ...

  3. 5W1H分析法

    "5W1H分析法"也叫"六何分析法",它是一种分析方法也可以说是一种创造技法.是对选定的项目.工序和操作,都要从原因(Why).对象(What).地点(Wher ...

  4. sizeof与类,继承,virtual的种种

    对虚继承层次的对象的内存布局,在不同编译器实现有所区别. 首先,说说GCC的编译器. 它实现比较简单,不管是否虚继承,GCC都是将虚表指针在整个继承关系中共享的,不共享的是指向虚基类的指针. clas ...

  5. Linux文件系统挂载管理

    http://itercast.com/lecture/19 文件系统创建好之后需要挂载到系统中方可使用,windows.Mac系统会自动挂载文件系统,而Linux下一般需要手工挂载或配置系统进行自动 ...

  6. Java宝典(二)

    --String s = "a" + "b" + "c" + "d"; 一共创建了多少个对象? --对于如下代码: St ...

  7. (史上最全的ios源码汇总)

    按钮类         按钮 Drop Down Control         http://www.apkbus.com/android-106661-1-1.html 按钮-Circular M ...

  8. html和css实现一级菜单和二级菜单学习笔记

    实现一级菜单: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...

  9. Boost线程库学习笔记

    一.创建一个线程 创建线程 boost::thread myThread(threadFun); 需要注意的是:参数可以是函数对象或者函数指针.并且这个函数无参数,并返回void类型. 当一个thre ...

  10. [Spring入门学习笔记][静态资源]

    遗留问题 在上一节课的作业中,我们一定遇到了一点问题——虽然将页面内容正确的返回给了浏览器,但是浏览器显示的样式却是不正确的,这是因为在HTML的\标签中我们这样引入了CSS资源: <link ...