-
Notifications
You must be signed in to change notification settings - Fork 28
/
learn-vi-191-diff.html
79 lines (70 loc) · 6.85 KB
/
learn-vi-191-diff.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh" xml:lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="learn-vi.css" />
<title>VIM学习笔记 比较文件(diff)</title>
</head>
<body>
<p>Vim通过调用外部的diff命令,可以对相似的文件进行比较。使用<code class="inset">:help diff</code>命令,可以查看关于比较文件的更多信息。</p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">配置</p>
<p>在Windows系统下,请确认diff.exe已经存在于vim目录之下;并且在操作系统的PATH变量中,也包含了该目录:</p>
<p><a href="https://yyq123.github.io/learn-vim/images/diff.exe.png" title="diff"><img src="https://yyq123.github.io/learn-vim/images/diff.exe.png" alt="diff" width="500" height="81" /></a></p>
<p>为了避免<a href="http://yyq123.github.io/learn-vim/learn-vi-62-ColorScheme.html" title="Color Scheme">配色方案</a>对比较结果显示效果的影响,我们可以在<a href="http://yyq123.github.io/learn-vim/learn-vi-59-vimrc.html" title="vimrc">vimrc配置文件</a>中,增加以下命令,以便在比较文件时使用默认的显示颜色:</p>
<p><code class="inset">
au FilterWritePre * if &diff | colorscheme default | endif<br />
if &diff<br />
colorscheme default<br />
endif</code></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">比较</p>
<p>可以从命令行调用以下命令,来打开两个文件进行比较:</p>
<p style="text-indent:2em"><code class="inset">vim -d file1 file2</code></p>
<p>如果已经打开了文件file1,那么可以在Vim中用以下命令,再打开另一个文件file2进行比较:</p>
<p style="text-indent:2em"><code class="inset">:diffsplit file2</code></p>
<p>如果已经使用split打开了两个文件,那么可以分别在两个窗口里面输入以下命令,进行比较:</p>
<p style="text-indent:2em"><code class="inset">:diffthis</code></p>
<p>屏幕将被水平分隔,分别显示一个文件,其中不同的部分将被高亮显示。</p>
<ul>
<li>只在某一文件中存在的行,显示为<span style="color:white; background-color:blue">蓝色</span>;</li>
<li>而在另一文件中的对应位置的行,显示为<span style="color:white; background-color:green">绿色</span>;</li>
<li>在两个文件中都存在的行,显示为<span style="color:white; background-color:purple">紫色</span></li>
<li>行中不相同的字符,显示为<span style="color:white; background-color:red">红色</span>;</li>
<li>相同的行,没有高亮显示并且会被折叠。</li>
</ul>
<p>如果想要垂直比较两个文件,可以使用以下命令:</p>
<p style="text-indent:2em"><code class="inset">:vert diffsplit file2</code></p>
<p><a href="https://yyq123.github.io/learn-vim/images/diff_v.png" title="diff"><img src="https://yyq123.github.io/learn-vim/images/diff_v.png" alt="diff" width="500" height="113" /></a></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">折叠</p>
<p>使用<code class="inset">zo</code>命令,可以展开被折叠的相同的文本行;而<code class="inset">zc</code>命令,则可以重新折叠相同的行。</p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">查看</p>
<p>比较文件时,经常需要结合上下文来确定最终要采取的操作。缺省情况下,是会把不同之处上下各6行的文本显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以使用以下命令:</p>
<p style="text-indent:2em"><code class="inset">:set diffopt=context:3</code></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">滚动</p>
<p>如果你在一个文件中滚动屏幕,那么另一个文件也会自动滚动以显示相同的位置。你可以使用以下命令,取消联动:</p>
<p style="text-indent:2em"><code class="inset">:set noscrollbind</code></p>
<p>使用以下命令,将重新绑定联动:</p>
<p style="text-indent:2em"><code class="inset">:set scrollbind</code></p>
<p>利用以下命令,可以定义滚动方式:</p>
<p style="text-indent:2em"><code class="inset">:set scrollopt ver,hor,jump</code></p>
<p>其中:选项<em>ver </em>,启用垂直同步滚动;选项<em>hor </em>,启用水平同步滚动;而<em>jump </em>选项,则在切换窗口时,使垂直滚动始终同步。</p>
<p>如果光标停留在两个文件的不同位置,那么可以使用下面的命令同步滚动:</p>
<p style="text-indent:2em"><code class="inset">:syncbind</code></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">更新</p>
<p>如果更改了某个文件的内容,vim又没有自动更新diff检查,那么可以使用如下命令更新:</p>
<p style="text-indent:2em"><code class="inset">:diffupdate</code></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">跳转</p>
<p>你可以用<code class="inset">[c</code>命令;跳转到前一个不同点;或者用<code class="inset">]c</code>命令,跳转到后一个不同点。</p>
<table summary="Commands" border="2" frame="hsides" rules="all" cellspacing="0" cellpadding="3">
<caption>命令小结</caption>
<tr><td><code class="inset">:diffsplit</code></td><td>分隔窗并比较文件</td></tr>
<tr><td><code class="inset">:diffthis</code></td><td>比较文件</td></tr>
<tr><td><code class="inset">:diffupdate</code></td><td>更新比较结果</td></tr>
<tr><td><code class="inset">zo</code></td><td>展开</td></tr>
<tr><td><code class="inset">zc</code></td><td>折叠</td></tr>
<tr><td><code class="inset">[c</code></td><td>跳转到前一个不同点</td></tr>
<tr><td><code class="inset">]c</code></td><td>跳转到后一个不同点</td></tr>
</table>
<p style="border-top:1px solid lightgray"><span style="float:right">Ver: 2.0 | <a href="mailto:[email protected]">YYQ</a></span><span><<a title="编辑多个文件(Edit Multiple Files)" href="http://yyq123.github.io/learn-vim/learn-vi-17-MultiFile.html">上一篇</a> |<a title="笔记列表" href="http://yyq123.github.com/learn-vim/learn-vi-00-List.html"> 目录 </a>| <a title="操作文件(Manipulate File)" href="http://yyq123.github.io/learn-vim/learn-vi-18-ManipulateFile.html">下一篇</a>></span></p>
</body>
</html>