linux terminal 命令--vimdiff

一、启动方法

首先保证系统中的diff命令是可用的,vim的diff模式依赖于diff命令。

vimdiff的基本用法就是:

# vimdiff              FILE_LEFT       FILE_RIGHT

# vimdiff   -d        FILE_LEFT     FILE_RIGHT  //左右竖屏

# vimdiff   -o         FILE_LEFT     FILE_RIGHT //上下横屏

vimdiff命令的执行结果

从上图我们可以看到一个清晰的比较结果。屏幕被垂直分割,左右两侧分别显示被比较的两个文件。

两个文件中连续的相同的行被折叠了起来,以便使用者能把注意力集中在两个文件的差异上。

只在某一文件中存在的行的背景色被设置为蓝色,而在另一文件中的对应位置被显示为绿色。

两个文件中都存在,但是包含差异的行显示为粉色背景,引起差异的文字用红色背景加以突出。

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

# vim FILE_LEFT

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

:vertical diffsplit  FILE_RIGHT

 

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

1.Ctrl-w  K(把当前窗口移到最上边)

2.Ctrl-w  J(把当前窗口移到最下边)

3.Ctrl-w   H(把当前窗口移到最左边)

4.Ctrl-w   L(把当前窗口移到最右边)

二、光标移动

试试在行间移动光标,可以看到左右两侧的屏幕滚动是同步的。

这是因为"scrollbind"选项被设置了的结果,vim会尽力保证两侧文件的对齐。

如果不想要这个特性,可以设置:

:set noscrollbind

 

可以使用快捷键在各个差异点之间快速移动

跳转到下一个差异点:]c

反向跳转是:[c

如果在命令前加上数字的话,可以跳过一个或数个差异点,从而实现跳的更远。

如果在位于第一个差异点的行输入"2]c",将越过下一个差异点,跳转到第三个差异点。

 

三、文件合并

文件比较的最终目的之一就是合并,以消除差异。

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

dp (diff "put")

//从当前复制到另一个

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

do(diff "obtain")

//从另一个复制到当前

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

指定范围的合并

1.先指定范围1-100行,再用另外一个窗口的不同处替换当前:

:1,100 diffg 或者:1,100 diffget

这里,等同于do(diff obtain)不过指定了范围,如果有缓冲还可在diffg后面指定缓冲名字

2.先指定范围1-100行,再用另外一个窗口的不同处替换当前:

:1,100 diffpu 或者  :1,100 diffput

这里,等同于dp(diff put)不过指定了范围,如果有缓冲还可在diffpu后面指定缓冲名字

如果希望手工修改某一行,可以使用通常的vim操作。

如果希望在两个文件之间来回跳转,可以用下列命令序列:

Ctrl-w, w

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

:diffupdate

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

 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)

用下列命令来重新折叠:

zc (folding close)

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

注意:展开折叠需要将光标移至折叠处

 

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

六、结论

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

参考资料

vim主页:http://www.vim.org

vim中文帮助:http://man.chinaunix.net/newsoft/vi/doc/help.html

vi/vim使用进阶:

http://easwy.com/blog/archives/advanced-vim-skills-catalog/

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

http://hi.baidu.com/_jg_/blog/item/ff62e6d5d9ecf315a08bb77c.html

http://hi.baidu.com/nkhzj/blog/item/e6b5a7017222100a1d958307.html



作者:MissHandsome
链接:https://www.jianshu.com/p/0541a67c6d3f
来源:简书

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值