参见:

http://blog.csdn.net/swust_long/article/details/6990033

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

最简单的打开新窗口的命令::split

关闭窗口::close, 或 :quit 或 ZZ。但close可以避免在剩下一个窗口的时候不小心退出vim。

关闭除当前窗口以外的所有窗口: :only

vsplit

vnew

Vimdiff的基本用法就是:

# vimdiff  FILE_LEFT  FILE_RIGHT
或者
# vim -d  FILE_LEFT  FILE_RIGHT

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

自动折行就是set wrap,让超过屏幕宽度的字符到下一行显示。

textwidth设置一行的最大宽度,超过的部分会自动到下一行中,如果设置为0那么就不会有这种效果了。这个换行是会在行尾加上一个\n的,所以如果printf引号中的内容过长就会有问题了。

而让我比较困惑的是wrapmargin 按说wrap是折行,也就是超过屏幕宽度的行会自动回绕然后在下一行继续,但是这中间没有\n,也就是本质上还是一行而不是两行。这个wm第一感觉应该是回绕的宽度,也就是到一个指定的宽度回绕而不是换行,即使你的屏幕宽度还有不少。但是实际效果不是那么回事,设置了wm为80它好像在70多的地方就换行了,注意是换行而不是折行。然后终于找到了关于这个的详细说明……
The 'wrapmargin' option does almost the same.  The difference is that 'textwidth' has a fixed width while 'wrapmargin' depends on the width of the screen.  When using 'wrapmargin' this is equal to using 'textwidth' with a value equal to (columns - 'wrapmargin'), where columns is the width of the
screen.
也就是它设置的是屏幕右边空白的宽度,也就是字面上margin的大小,实际效果还是折行的。因为我的gnome-terminal全屏之后宽度是153,wm=80那么相当于tw=153-80=73,所以就有上边的现象了,清楚了这个,那我还是直接设置tw参数吧……折腾了一下午了

还有关于formatoptions的设置。默认的是fo=tcq,具体资料可以:help fo-table,这里说说自己添加的几个参数:
fo+=ro 这两个参数是自动添加comment leader的
r       Automatically insert the current comment leader after hitting
        <Enter> in Insert mode.
fo+=mM 这两个是宽字符相关的,还没测试
m       Also break at a multi-byte character above 255.  This is useful for
        Asian text where every character is a word on its own.
M       When joining lines, don't insert a space before or after a multi-byte
        character.  Overrules the 'B' flag.

vimdiff及vim split相关推荐

  1. vimdiff对比文件夹

    背景 在日常开发过程中免不了的是使用文件差异对比工具进行文本差异对比.常用的对比工具有meld.vimdiff.TextDiff等.但是meld.TextDiff等工具都是图形界面工具,对与纯粹的终端 ...

  2. 《呆呆大虾原创VIM教程-基础篇》文 and《Vim-从入门到进阶》图

    目录 将CapsLock 键 改为 ESC键 原创Vim教程-01前言 原创Vim教程-02小试牛刀 原创Vim教程-03帮助(辅助) 原创Vim教程-04移动 对区域进行选择(图) Vim教程-05 ...

  3. Linux之vim的使用

    1.vim的三种模式 (1)普通模式 #1.命令光标跳转 G #光标跳转至末端 gg #光标跳转至顶端 Ngg #光标跳转至当前文件内的N行 $ #光标跳转至当前光标所在行的尾部 ^|0 #光标跳转至 ...

  4. 3.14-19 wc、iconv、dos2unix、diff、vimdiff、rev

    3.14 wc:统计文件的行数.单词数或字节数 wc命令用于统计文件的行数.单词数或字节数. -c 统计字节数 -w 统计单词数 -l 统计行数     -L 打印最长行的长度 -m 统计字符数 查看 ...

  5. linux vim命令_提升生产力的20大Linux Vim命令

    linux vim命令 VIM or the Vi Improved text editor is one of the most advanced text editors available. L ...

  6. vimdiff 命令使用介绍

    vimdiff 等同于 vim -d 命令,即 Vim 编辑器的 diff 模式. 该命令后面通常会接两个或多个文件名作为参数,这些文件会同时在 Vim 编辑器的分割窗口中打开,并高亮显示文件中内容有 ...

  7. linux下文件对比工具详解(diff、diff3、sdiff、vimdiff和comm)

    工具概述(主要是sdiff和diff): ############################################################################### ...

  8. 解决vimdiff ‘E97: Cannot create diffs‘错误的一种方法

    解决vimdiff 'E97: Cannot create diffs'错误的一种方法 | 赛因拔都 [ XBATU.COM ]http://www.xbatu.com/node/19 最近在新环境下 ...

  9. L24.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- diff和vimdiff命令

    3.17 diff:比较两个文件的不同 3.17.1 命令详解 ​ [命令星级] ★★★★☆ ​ [功能说明] ​ diff命令可以逐行比较纯文本文件的内容,并输出文件的差异. ​ [语法格式] di ...

最新文章

  1. 《Javascript入门学习全集》 Javascript学习第二季(实战4)
  2. Rust基础笔记:Getting input from the console
  3. pdf屏幕取词 android,===C#屏幕取词Demo热键版鼠标划词版【含语音版】【附源码】===...
  4. Java经典面试题整理及答案详解(二)
  5. datasnap ajax jsonp,有没有办法在Delphi DataSnap REST服务器上使用JSONP?
  6. 【今日CS 视觉论文速览】Part2, 18 Jan 2019
  7. 重庆的计算机学校排名2015,2015年计算机考研学校排名
  8. 【动态规划】程序员面试金典——11.7叠罗汉I
  9. 在Chrome浏览器中保存的密码有多安全?
  10. ubuntu系统下安装gcc
  11. 重置Studio 3T的试用时间
  12. 详细解LeetCode 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
  13. Twitter引流如何开发客户
  14. Facebook_scraper:Python获取FB用户的公开发帖【FaceBook系列 一】
  15. 一转眼,波士顿动力 Atlas 机器人又会过独木桥了!
  16. SBC芯片35584数据手册预调节器翻译
  17. python 连乘函数_python中如何进行连乘计算
  18. C语言中的空指针、空指针常量、NULL 0
  19. @ConfigurationProperties注解使用
  20. 论文阅读 [TPAMI-2022] On Learning Disentangled Representations for Gait Recognition

热门文章

  1. Hangfire 基本使用
  2. IDEA2018 license server激活方式
  3. POJ1837 DP
  4. git 码云 简要使用
  5. mysql造1000万数据_MySQL制作具有千万条测试数据的测试库
  6. c语言数码管中断器,数码管动态显示 定时器中断 数码管动态显示不正常
  7. c++中cout、cerr、clog的区别
  8. 今日头条2017前端工程师实习生笔试题
  9. 关于内存泄漏和内存溢出
  10. 计算数组A的大小与地址