4.11 与外部工具集成

    Vim可以与许多外部程序集成,功能十分强大,比如 diff , ctags , sort , xxd 等等,下面选取几个简单介绍一下。

    diff

    Linux命令 diff 用来对比两个文件的内容,不过对比结果显示在终端里,可读性比较差。结合Vim,在终端里可以直接输入命令 vimdiff,后面跟两个文件名作为参数:

    vimdiff file1 file2
    即可在Vim里分屏显示两个文件内容的对比结果,对文件内容差异部分进行高亮标记,还可以同步滚动两个文件内容,更可以实时修改文件内容,方便程度和用户体验大大提高。

    vimdiff a.txt b.txt
    如果直接给 -d 选项是一样的

    vim -d a.txt b.txt
    除了在终端里开启vimdiff 功能,也可以在打开Vim后,在Vim的命令模式输入相关命令来开启 vimdiff 功能:

    :diffsplit abc.txt
    如果你现在已经开启了一个文件,想Vim帮你区分你的文件跟 abc.txt 有什么区别,可以在Vim中用 diffsplit 的方式打开第二个文件,这个时 候Vim会用 split(分上下两屏)的方式开启第二个文件,并且通过颜色,fold来显示两个文件的区别
    这样Vim就会用颜色帮你区分开2个文件的区别。如果文件比较大(源码)重复的部分会帮你折叠起来。

    :diffpatch filename
    通过 :diffpatch 你的patch的文件名,就可以以当前文件加上你的patch来显示。vim会split一个新的屏,显示patch后的信息并且用颜色标明区别。
    如果不喜欢上下对比,喜欢左右(比较符合视觉)可以在前面加 vert ,例如:

    :vert diffsplit abc.txt
    :vert diffpatch abc.txt
    看完diff,用 :only 回到原本编辑的文件,觉得diff的讨厌颜色还是在哪里,只要用 :diffoff 关闭就好了。
    还有个常用的diff中的就是 :diffu ,这个是 :diffupdate 的简写,更新的时候用。
    Vim的diff功能显示效果如下所示:


    图片来自 http://www.2cto.com/net/201608/536924.html
    sort

    Linux命令 sort 可以对文本内容进行按行中的字符比较、排序,但在终端里使用 sort 命令处理文件,并不能实时查看文件内容。具体用法请自查手册。

    xxd

    vim+xxd 是Linux下最常用的二进制文本编辑工具,xxd其实是Vim外部的一个转换程序,随Vim一起发布,在Vim里调用它来编辑二进制文本非常方便。
    首先以二进制模式在终端里打开一个文件:

    vim -b filename
    Vim 的 -b 选项是告诉 Vim 打开的是一个二进制文件,不指定的话,会在后面加上 0x0a ,即一个换行符。
    然后在Vim的命令模式下键入:

    :%!xxd
    即可看到二进制模式显示出来的文本,看起来像这样:

    0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ….9..;..tt.+NI
    0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,……b..4^.0
    0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;’1.”…..i.59
    然后就可以在二进制模式下编辑该文件,编辑后保存,然后用下面命令从二进制模式转换到普通模式:

    :%!xxd -r
    另外,也可以调整二进制的显示模式,默认是 2 个字节为一组,可以通过 g 参数调整每组字节数:

    :%!xxd -g 1 表示每1个字节为1组
    :%!xxd -g 2 表示每2个字节为1组(默认)
    :%!xxd -g 4 表示每4个字节为1组