annotate runtime/doc/diff.txt @ 234:a686fd6c8beb v7.0065

updated for version 7.0065
author vimboss
date Mon, 28 Mar 2005 21:02:15 +0000
parents 49748afd794b
children a20218704019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
195
49748afd794b updated for version 7.0058
vimboss
parents: 20
diff changeset
1 *diff.txt* For Vim version 7.0aa. Last change: 2005 Mar 08
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 VIM REFERENCE MANUAL by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 *diff* *vimdiff* *gvimdiff* *diff-mode*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 This file describes the +diff feature: Showing differences between two or
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 three versions of the same file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 The basics are explained in section |08.7| of the user manual.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 1. Starting diff mode |vimdiff|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 2. Viewing diffs |view-diffs|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 3. Jumping to diffs |jumpto-diffs|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 4. Copying diffs |copy-diffs|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17 5. Diff options |diff-options|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 {not in Vi}
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 1. Starting diff mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 The easiest way to start editing in diff mode is with the "vimdiff" command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 This starts Vim as usual, and additionally sets up for viewing the differences
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 between the arguments. >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 vimdiff file1 file2 [file3 [file4]]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 This is equivalent to: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 vim -d file1 file2 [file3 [file4]]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34 You may also use "gvimdiff" or "vim -d -g". The GUI is started then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 You may also use "viewdiff" or "gviewdiff". Vim starts in readonly mode then.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 "r" may be prepended for restricted mode (see |-Z|).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 The second and following arguments may also be a directory name. Vim will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 then append the file name of the first argument to the directory name to find
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 the file.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42 This only works when a standard "diff" command is available. See 'diffexpr'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 What happens is that Vim opens a window for each of the files. This is like
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45 using the |-O| argument. This uses vertical splits. If you prefer horizontal
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 splits add the |-o| argument: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 vimdiff -o file1 file2 [file3]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 In each of the edited files these options are set:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 'diff' on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 'scrollbind' on
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 'scrollopt' includes "hor"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 'wrap' off
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 'foldmethod' "diff"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 'foldcolumn' 2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59 These options are set local to the window. When editing another file they are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 reset to the global value.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 The differences shown are actually the differences in the buffer. Thus if you
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 make changes after loading a file, these will be included in the displayed
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64 diffs. You might have to do ":diffupdate" now and then, not all changes are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 immediately taken into account.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 In your .vimrc file you could do something special when Vim was started in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 diff mode. You could use a construct like this: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 if &diff
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 setup for diff mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73 setup for non-diff mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76 While already in Vim you can start diff mode in three ways.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78 *E98*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 :diffsplit {filename} *:diffs* *:diffsplit*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 Open a new window on the file {filename}. The options are set
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81 as for "vimdiff" for the current and the newly opened window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 Also see 'diffexpr'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 *:difft* *:diffthis*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 :diffthis Make the current window part of the diff windows. This sets
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
86 the options like for "vimdiff".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 :diffpatch {patchfile} *:diffp* *:diffpatch*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 Use the current buffer, patch it with the diff found in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 {patchfile} and open a buffer on the result. The options are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 set as for "vimdiff".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 {patchfile} can be in any format that the "patch" program
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 understands or 'patchexpr' can handle.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 Note that {patchfile} should only contain a diff for one file,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 the current file. If {patchfile} contains diffs for other
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 files as well, the results are unpredictable. Vim changes
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 directory to /tmp to avoid files in the current directory
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 accidentally being patched. But it may still result in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 various ".rej" files to be created. And when absolute path
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 names are present these files may get patched anyway.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 To make these commands use a vertical split, prepend |:vertical|. Examples: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 :vert diffsplit main.c~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 :vert diffpatch /tmp/diff
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 <
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 *E96*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 There can be up to four buffers with 'diff' set.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 Since the option values are remembered with the buffer, you can edit another
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 file for a moment and come back to the same file and be in diff mode again.
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
112
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
113 *:diffo* *:diffoff*
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
114 :diffoff Switch off diff mode for the current window.
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
115
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
116 :diffoff! Switch off diff mode for all windows.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117
16
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
118 The ":diffoff" command resets the relevant options to their default value.
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
119 This may be different from what the values were before diff mode was started,
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
120 the old values are not remembered.
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
121
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
122 'diff' off
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
123 'scrollbind' off
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
124 'scrollopt' without "hor"
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
125 'wrap' on
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
126 'foldmethod' "manual"
3ba373b54370 updated for version 7.0008
vimboss
parents: 7
diff changeset
127 'foldcolumn' 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 2. Viewing diffs *view-diffs*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 The effect is that the diff windows show the same text, with the differences
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 highlighted. When scrolling the text, the 'scrollbind' option will make the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 text in other windows to be scrolled as well. With vertical splits the text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 should be aligned properly.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 The alignment of text will go wrong when:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 - 'wrap' is on, some lines will be wrapped and occupy two or more screen
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 - folds are open in one window but not another
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 - 'scrollbind' is off
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 - changes have been made to the text
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 - "filler" is not present in 'diffopt', deleted/inserted lines makes the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144 alignment go wrong
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 All the buffers edited in a window where the 'diff' option is set will join in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147 the diff. This is also possible for hidden buffers. They must have been
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 edited in a window first for this to be possible.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 Since 'diff' is a window-local option, it's possible to view the same buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 in diff mode in one window and "normal" in another window. It is also
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152 possible to view the changes you have made to a buffer, but since Vim doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 allow having two buffers for the same file, you need to make a copy of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 original file and diff with that. For example: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155 :!cp % tempfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 :diffsplit tempfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 A buffer that is unloaded cannot be used for the diff. But it does work for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 hidden buffers. You can use ":hide" to close a window without unloading the
195
49748afd794b updated for version 7.0058
vimboss
parents: 20
diff changeset
160 buffer. If you don't want a buffer to remain used for the diff do ":set
49748afd794b updated for version 7.0058
vimboss
parents: 20
diff changeset
161 nodiff" before hiding it.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163 *:diffu* *:diffupdate*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 Vim attempts to keep the differences updated when you make changes to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165 text. This mostly takes care of inserted and deleted lines. Changes within a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 line and more complicated changes do not cause the differences to be updated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 To force the differences to be updated use: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169 :diffupdate
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 Vim will show filler lines for lines that are missing in one window but are
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 present in another. These lines were inserted in another file or deleted in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 this file. Removing "filler" from the 'diffopt' option will make Vim not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175 display these filler lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 Folds are used to hide the text that wasn't changed. See |folding| for all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 the commands that can be used with folds.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 The context of lines above a difference that are not included in the fold can
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 be set with the 'diffopt' option. For example, to set the context to three
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 lines: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 :set diffopt=filler,context:3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 The diffs are highlighted with these groups:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190 |hl-DiffAdd| DiffAdd Added (inserted) lines. These lines exist in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 this buffer but not in another.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 |hl-DiffChange| DiffChange Changed lines.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 |hl-DiffText| DiffText Changed text inside a Changed line. Vim
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 finds the first character that is different,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195 and the last character that is different
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 (searching from the end of the line). The
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 text in between is highlighted. This means
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 that parts in the middle that are still the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 same are highlighted anyway.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200 |hl-DiffDelete| DiffDelete Deleted lines. Also called filler lines,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 because they don't really exist in this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202 buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 3. Jumping to diffs *jumpto-diffs*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 Two commands can be used to jump to diffs:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 *[c*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 [c Jump backwards to the previous start of a change.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 When a count is used, do it that many times.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 *]c*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 ]c Jump forwards to the next start of a change.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 When a count is used, do it that many times.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 It is an error if there is no change for the cursor to move to.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 4. Diff copying *copy-diffs* *E99* *E100* *E101* *E102* *E103*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220 There are two commands to copy text from one buffer to another. The result is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 that the buffers will be equal within the specified range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 *:diffg* *:diffget*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 :[range]diffg[et] [bufspec]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 Modify the current buffer to undo difference with another
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 buffer. If [bufspec] is given, that buffer is used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 Otherwise this only works if there is one other buffer in diff
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 See below for [range].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231 *:diffpu* *:diffput*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 :[range]diffpu[t] [bufspec]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233 Modify another buffer to undo difference with the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 buffer. Just like ":diffget" but the other buffer is modified
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 instead of the current one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 See below for [range].
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 *do*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 do Same as ":diffget" without argument or range. The "o" stands
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 for "obtain" ("dg" can't be used, it could be the start of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 "dgg"!).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 *dp*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 dp Same as ":diffput" without argument or range.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246 When no [range] is given, the diff at the cursor position or just above it is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 affected. When [range] is used, Vim tries to only put or get the specified
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 lines. When there are deleted lines, this may not always be possible.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 There can be deleted lines below the last line of the buffer. When the cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251 is on the last line in the buffer and there is no diff above this line, the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 ":diffget" and "do" commands will obtain lines from the other buffer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 To be able to get those lines from another buffer in a [range] it's allowed to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 use the last line number plus one. This command gets all diffs from the other
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 buffer: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 :1,$+1diffget
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 Note that deleted lines are displayed, but not counted as text lines. You
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 can't move the cursor into them. To fill the deleted lines with the lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 from another buffer use ":diffget" on the line below them.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 The [bufspec] argument above can be a buffer number, a pattern for a buffer
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 name or a part of a buffer name. Examples:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
266
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 :diffget Use the other buffer which is in diff mode
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 :diffget 3 Use buffer 3
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269 :diffget v2 Use the buffer which matches "v2" and is in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 diff mode (e.g., "file.c.v2")
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 5. Diff options *diff-options*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 Also see |'diffopt'| and the "diff" item of |'fillchars'|.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 FINDING THE DIFFERENCES *diff-diffexpr*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 The 'diffexpr' option can be set to use something else than the standard
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 "diff" program to compare two files and find the differences.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 When 'diffexpr' is empty, Vim uses this command to find the differences
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 between file1 and file2: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 diff file1 file2 > outfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 The ">" is replaced with the value of 'shellredir'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 The output of "diff" must be a normal "ed" style diff. Do NOT use a context
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 diff. This example explains the format that Vim expects: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 1a2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 > bbb
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295 4d4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 < 111
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297 7c7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 < GGG
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 ---
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 > ggg
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 The "1a2" item appends the line "bbb".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 The "4d4" item deletes the line "111".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 The '7c7" item replaces the line "GGG" with "ggg".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 When 'diffexpr' is not empty, Vim evaluates to obtain a diff file in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 format mentioned. These variables are set to the file names used:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 v:fname_in original file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 v:fname_new new version of the same file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 v:fname_out resulting diff file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 Additionally, 'diffexpr' should take care of "icase" and "iwhite" in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 'diffopt' option. 'diffexpr' cannot change the value of 'lines' and
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315 'columns'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 Example (this does almost the same as 'diffexpr' being empty): >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 set diffexpr=MyDiff()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 function MyDiff()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 let opt = ""
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322 if &diffopt =~ "icase"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 let opt = opt . "-i "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 if &diffopt =~ "iwhite"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326 let opt = opt . "-b "
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 \ " > " . v:fname_out
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 The "-a" argument is used to force comparing the files as text, comparing as
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
333 binaries isn't useful. The "--binary" argument makes the files read in binary
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 mode, so that a CTRL-Z doesn't end the text on DOS.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336 *E97*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 Vim will do a test if the diff output looks alright. If it doesn't, you will
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 get an error message. Possible causes:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 - The "diff" program cannot be executed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 - The "diff" program doesn't produce normal "ed" style diffs (see above).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341 - The 'shell' and associated options are not set correctly. Try if filtering
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 works with a command like ":!sort".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 - You are using 'diffexpr' and it doesn't work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 If it's not clear what the problem is set the 'verbose' option to see more
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 messages.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346
20
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 16
diff changeset
347 The self-installing Vim includes a diff program. If you don't have it you
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 16
diff changeset
348 might want to download a diff.exe. For example from
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 16
diff changeset
349 http://jlb.twu.net/code/unixkit.php.
4ac1dce8dd5e updated for version 7.0012
vimboss
parents: 16
diff changeset
350
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 USING PATCHES *diff-patchexpr*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 The 'patchexpr' option can be set to use something else than the standard
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 "patch" program.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 When 'patchexpr' is empty, Vim will call the "patch" program like this: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 patch -o outfile origfile < patchfile
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 This should work fine with most versions of the "patch" program. Note that a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362 CR in the middle of a line may cause problems, it is seen as a line break.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 If the default doesn't work for you, set the 'patchexpr' to an expression that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 will have the same effect. These variables are set to the file names used:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 v:fname_in original file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 v:fname_diff patch file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 v:fname_out resulting patched file
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 Example (this does the same as 'patchexpr' being empty): >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 let patchexpr=MyPatch
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 function MyPatch
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 :call system("patch -o " . v:fname_out . " " . v:fname_in .
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 \ " < " . v:fname_diff)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 endfunction
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 Make sure that using the "patch" program doesn't have unwanted side effects.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 For example, watch out for additionally generated files, which should be
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 deleted. It should just patch the file and nothing else.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 Vim will change directory to "/tmp" or another temp directory before
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 evaluating 'patchexpr'. This hopefully avoids that files in the current
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 directory are accidentally patched. Vim will also delete files starting with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
385 v:fname_in and ending in ".rej" and ".orig".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 vim:tw=78:ts=8:ft=help:norl: