2
2
3
3
4
4
VIM 参考手册 作者:Bram Moolenaar
5
- 翻译:Zimin<cranecai@users.sf.net>
6
- VCD主页:http://vimcdoc.sf.net
5
+ 翻译:Zimin<cranecai@users.sf.net>
6
+ VCD主页:http://vimcdoc.sf.net
7
7
8
8
9
9
*diff* *vimdiff* *gvimdiff* *diff-mode*
10
- 这篇文章介绍了 +diff 的特点:即在同一文件的2或3版本间比较不同之处 。
10
+ 这篇文章介绍了 +diff 的特点:即在同一文件的2或3个版本间比较不同之处 。
11
11
12
- 基本描述是在用户手册 | 08.7 | 节中。
12
+ 基本描述在用户手册 | 08.7 | 节中。
13
13
14
14
1. 进入 diff 模式 | vimdiff |
15
- 2. 查看 diffs | view-diffs |
15
+ 2. 查看 diffs | view-diffs |
16
16
3. 在 diffs 间跳转 | jumpto-diffs |
17
- 4. 拷贝 diffs | copy-diffs |
17
+ 4. 拷贝 diffs | copy-diffs |
18
18
5. Diff 选项 | diff-options |
19
19
20
20
{not in Vi}
23
23
1. 进入 diff 模式
24
24
25
25
进入 diff 模式编辑的最简单方法就是用 "vimdiff" 命令。它象通常启动 Vim 一样,
26
- 不过额外的它使用参数来设定查看不同之处 。 >
26
+ 不过额外地,它设定一些参数来设定查看不同之处 。 >
27
27
28
28
vimdiff file1 file2 [file3 [file4]]
29
29
30
30
这等同于: >
31
31
32
32
vim -d file1 file2 [file3 [file4]]
33
33
34
- 你也可以使用 "gvimdiff" 或 "vim -g" 。GUI 就启动了。
35
- 你也可以使用 "viewdiff" 或 "gviewdiff -g " 。Vim 就进入只读模式了。
36
- "r" 用来进入受限模式 (参考 | -Z | ).
34
+ 你也可以使用 "gvimdiff" 或 "vim -g"。GUI 就启动了。
35
+ 你也可以使用 "viewdiff" 或 "gviewdiff" 。Vim 就进入只读模式了。
36
+ "r" 可以作为前缀用来进入受限模式 (参考 | -Z | ).
37
37
38
- 第二个跟着的参数也可以是目录名 。Vim 将依据第一个参数所指定的文件名在以上所定的
38
+ 第二个及其后的参数也可以是目录名 。Vim 将依据第一个参数所指定的文件名在以上所定的
39
39
目录中查找文件。
40
40
41
- 这些仅当标准的 "diff" 命令可用时,才能工作 。参考 'diffexpr' 。
41
+ 这些仅当标准的 "diff" 命令可用时才有效 。参考 'diffexpr' 。
42
42
43
- Vim 将为每个文件打开一个窗口。这就象使用 | -O | 参数 。使用垂直分割。如果你要水平
43
+ Vim 将为每个文件打开一个窗口。就象使用 | -O | 参数一样 。使用垂直分割。如果你要水平
44
44
分割,加上 | -o | 参数: >
45
45
46
46
vimdiff -o file1 file2 [file3]
47
47
48
- 在每一个被编辑的文件中,以下参数被设定 :
48
+ 在每一个被编辑的文件中,以下选项被设定 :
49
49
50
50
'diff' on
51
51
'scrollbind' on
57
57
这些参数仅设置于当前窗口。就是说,当再分割窗口或编辑其他文件时,以上选项被重设
58
58
回全局值。
59
59
60
- 所显示的不同之处是存在于缓冲里的 。所以,如果你在载入文件后做过改动,这些改动将
60
+ 所显示的不同之处是基于缓冲内容的 。所以,如果你在载入文件后做过改动,这些改动将
61
61
也被比较。你也许要不时的使用 "diffupdate",并不是所有的改动都立即被比较的。
62
62
63
- 当 Vim 进入 diff 模式后。 在你的 .vimrc 文件里,你可以做些特别的事情。如 : >
63
+ 在你的 .vimrc 文件里,你可以对 diff 模式做些特别的设定。可以用一下的结构 : >
64
64
65
65
if &diff
66
66
setup for diff mode
72
72
73
73
*E98*
74
74
:diffsplit {filename} *:diffs* *:diffsplit*
75
- 对 {filename} 开一个新窗口。当前的和新开的窗口被设定了和
75
+ 对 {filename} 开一个新窗口。当前的和新开的窗口被设定了和
76
76
"vimdiff" 一样的参数。参考 'diffexpr' 。
77
77
78
78
*:difft* *:diffthis*
82
82
:diffpatch {patchfile} *:diffp* *:diffpatch*
83
83
使用当前的缓冲,用 {patchfile} 给它打上补丁并打开一个缓冲显示
84
84
结果。设定了和 "vimdiff" 同样的参数。
85
- {patchfile} 可以是任何一种 "patch" 程序认识的或 'patchexpr'
85
+ {patchfile} 可以是任何一种 "patch" 程序认识的或 'patchexpr'
86
86
可以处理的格式。
87
- 注意: {patchfile} 只能包含一个文件的比较结果,即当前文件的。如
87
+ Note: {patchfile} 只能包含一个文件的比较结果,即当前文件的。如
88
88
果 {patchfile} 也包含了其他文件的比较,结果将不可预知。Vim 改
89
- 变目录到 /tmp 以避免当前目录被意外的打补丁。但它仍导致很多
89
+ 变目录到 /tmp 以避免当前目录被意外的打补丁。但它仍导致很多
90
90
".rej" 文件产生。当绝对路径名出现,这些文件可以被打补丁。
91
91
92
92
为了要垂直分割窗口,加上 | :vertical | . 如: >
95
95
:vert diffpatch /tmp/diff
96
96
<
97
97
*E96*
98
- 最多可用 'diff' 设置4缓冲 。
98
+ 最多可以对 4 个缓冲设置 'diff' 模式 。
99
99
100
- 因为选项的值是由缓冲记录的,你可以先编辑另一个文件一会再回头处理已进入 diff
100
+ 因为选项的值是由缓冲记录的,你可以先编辑另一个文件一会再回头处理已进入 diff
101
101
模式的文件。如果你想离开 diff 模式,可以重置 'diff' 选项。并且你很可能想去掉
102
102
折叠栏,使用: >
103
103
109
109
110
110
比较的效果是 diff 窗口显示了同一文件不同版本,并且将不同之处用加亮表示。当滚动
111
111
文本时,选项 'scrollbind' 将使在另一窗口的相应文本也随着滚动。当垂直分割文本使
112
- ,应恰当的对齐 。
112
+ ,会恰当的对齐 。
113
113
114
114
以下情况将使文本对齐出现错误:
115
115
- 当设置了 'wrap' 后,一些行将被自动换行,在屏幕上占有2或3行。
@@ -132,35 +132,34 @@ Vim
132
132
133
133
134
134
*:diffu* *:diffupdate*
135
- 但你改变文本时,Vim试图使比较保持更新 。最关心的就是被插入和删除的行。在一行里
135
+ 但你改变文本时,Vim 试图使比较保持更新 。最关心的就是被插入和删除的行。在一行里
136
136
的改动和更复杂的改动将不会使比较更新。要强制刷新比较使用: >
137
137
138
138
:diffupdate
139
139
140
140
141
- 对于那些在一个窗口了有在另一个里却没有的行 ,Vim 将显示填充的行。这些行不是在另
141
+ 对于那些在一个窗口里有在另一个里却没有的行 ,Vim 将显示填充的行。这些行不是在另
142
142
一个文件里被插入,就是在这个文件里被删除。当在选项 'diffopt' 除去 "filler"时,
143
- Vim将不显示这些行 。
143
+ Vim 将不显示这些行 。
144
144
145
145
146
- 折叠将被用来隐藏那些没有被更改过的文字。要知道所有用于折叠的命令,参考
146
+ 折叠将被用来隐藏那些没有被更改过的文字。要知道所有用于折叠的命令,参考
147
147
| folding | 。
148
148
149
149
在一不同之处以上的,不包括在折叠中的上下文,可用 'diffopt' 选项来设置。如,要
150
- 把上下文设为3行 : >
150
+ 把上下文设为 3 行 : >
151
151
152
152
:set diffopt=filler,context:3
153
153
154
154
155
- 用以下3群组来加亮不同之处:
156
- The diffs are highlighted with these groups:
155
+ 有以下语法加亮群组可以用来显示差异:
157
156
158
157
| hl-DiffAdd | DiffAdd 添加(插入)的行。这些行仅存在于一个缓冲中。
159
158
| hl-DiffChange | DiffChange 更改过的行。
160
159
| hl-DiffText | DiffText 在更改过的一行中,被更改过的文字。Vim 找到第一
161
160
个和最后一个不同的字符(从行末开始搜起)。之间
162
161
的文字被加亮。在中间的部分必然被加亮。
163
- | hl-DiffDelete | DiffDelete 被删除的行。也称为被填充的行,因为在这个缓冲里这些
162
+ | hl-DiffDelete | DiffDelete 被删除的行。也称为被填充的行,因为在这个缓冲里这些
164
163
行并不真正存在。
165
164
166
165
==============================================================================
@@ -174,7 +173,7 @@ The diffs are highlighted with these groups:
174
173
]c 向前至下一个更改的开始。当加上个数字后,便重复执行相应
175
174
遍。
176
175
177
- 当光标要移到的地方没有更改,这将产生错误 。
176
+ 如果不存在光标可以跳转到的更改,将产生错误 。
178
177
179
178
==============================================================================
180
179
4. 拷贝 diffs *copy-diffs* *E99* *E100* *E101* *E102* *E103*
@@ -203,18 +202,16 @@ do ͬ ":diffget"
203
202
dp 同 ":diffput" 但没有参数和范围。
204
203
205
204
当没有给定 [range] 时,受影响的不同之处仅是当前光标所处位置或就在其上方。当指
206
- 定 [range] 时,Vim 试图仅改动所特定的行。当有被删除的行时,这设定并不总是有效
207
- 。
205
+ 定 [range] 时,Vim 试图仅改动所特定的行。当有被删除的行时,这设定并不总是有效。
208
206
209
- 参数 [bufspec] 可以是一个缓冲的序号,一个缓冲名称或缓冲名称的一部分的模式,如
210
- :
207
+ 参数 [bufspec] 可以是一个缓冲的序号,一个缓冲名称或缓冲名称的一部分的模式,如:
211
208
212
209
:diffget 使用另一个进入 diff 模式的缓冲
213
210
:diffget 3 使用3号缓冲
214
211
:diffget v2 使用缓冲名同 "v2" 匹配的,并进入 diff 模式的(
215
212
如,"file.c.v2")
216
213
217
- 注意: 被删除的行可以显示出来,可不能被作为文本行统计。你不能将光标移至其中。
214
+ Note: 被删除的行可以显示出来,可不能被作为文本行统计。你不能将光标移至其中。
218
215
要用另一个缓冲来填充被删除的行,可在其下一行用 ":diffget"。
219
216
220
217
可能在最后一行之后有删除的行。要从另一个缓冲中取得那些行,可使用最后一行的行号
@@ -225,13 +222,13 @@ dp ͬ ":diffput"
225
222
==============================================================================
226
223
5. Diff 选项 *diff-options*
227
224
228
- 也可参考 | 'diffopt' | 和 "diff" 项中的 | 'fillchars' | .
225
+ 也可参考 | 'diffopt' | 和 "diff" 项中的 | 'fillchars' | 。
229
226
230
227
231
228
查 找 不 同 *diff-diffexpr*
232
229
233
230
选项 'diffexpr' 除了可以设定用来比较2个文件的 "diff" 程序并找到不同之处,也可
234
- 以用来设置其他东西 。
231
+ 以用来设置其它东西 。
235
232
236
233
当 'diffexpr' 是空的时候,Vim 使用以下命令在 file1 和 file2中查找不同之处: >
237
234
@@ -284,7 +281,7 @@ dp ͬ ":diffput"
284
281
endfunction
285
282
<
286
283
*E97*
287
- 如果 diff 的输出看上去完全正确,Vim将做一测试。 如果不正确,你将得到一个错误消
284
+ Vim 将测试 diff 的输出看上去是否完全正确, 如果不正确,你将得到一个错误消
288
285
息。很可能是因为:
289
286
- "diff" 程序无法执行。
290
287
- "diff" 程序 无法产生普通 "ed" 风格的 diff 文件(参考上面)。
@@ -294,14 +291,14 @@ dp ͬ ":diffput"
294
291
295
292
使 用 补 丁 *diff-patchexpr*
296
293
297
- 选项 'patchexpr' 除了可以设定标准 "patch" 程序,也可以用来设置其他东西 。
294
+ 选项 'patchexpr' 除了可以设定标准 "patch" 程序,也可以用来设置其它东西 。
298
295
299
296
当 'patchexpr' 为空时,Vim 将象这样调用 "patch" 程序的: >
300
297
301
298
patch -o outfile origfile < patchfile
302
299
303
- 在许多的 "patch" 程序的版本里,它可以正确工作。注意: 在一行中间的 CR 可能产生
304
- 问题。它看上去象一个换行符 。
300
+ 在许多的 "patch" 程序的版本里,它可以正确工作。 Note: 在一行中间的 CR 可能产生
301
+ 问题。它被当做一个换行符 。
305
302
306
303
如果默认值无法使工作,设定 'patchexpr' 使之有以上所述的同样的效果。使用以下变
307
304
量来设置文件名:
@@ -319,9 +316,9 @@ dp ͬ ":diffput"
319
316
endfunction
320
317
321
318
请确定使用 "patch" 程序时不会有不想要的副作用。如,要注意生成额外的文件,而以
322
- 后要被删除的。它应该仅仅是给文件打补丁,而无其他 。
323
- 使用 'patchexpr' 的值之前, Vim 将 改变当前目录到 "/tmp" 或其他临时目录中去
324
- 。这是期望当前目录下的文件不要被意外的打补丁。 Vim 也将删除以 v:fname_in 和以
319
+ 后要被删除的。它应该仅仅是给文件打补丁,而无其它 。
320
+ 使用 'patchexpr' 的值之前, Vim 将改变当前目录到 "/tmp" 或其他临时目录中。
321
+ 这是为了使当前目录下的文件不被意外的打补丁。 Vim 也将删除以 v:fname_in 和以
325
322
".rej" 及 ".orig" 结尾的文件。
326
323
327
324
vim:tw=78:ts=8:ft=help:norl:enc=euc-cn:
0 commit comments