[r211]: trunk / doc / usr_23.txt Maximize Restore History

Download this file

usr_23.txt    309 lines (206 with data), 12.9 kB

  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
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
*usr_23.txt* For Vim version 7.4. 最近更新: 2005年3月
VIM 用户手册 - Bram Moolenaar 著
译者: Chimin Yen http://vimcdoc.sf.net
编辑特殊文件
本章讨论特殊文件的编辑。利用 Vim 你可以编辑经过压缩或加密的文件。有些文件需要
在互联网上存取。二进制文件也能有限度地编辑。
|23.1| DOS、Mac 和 Unix 文件
|23.2| 互联网上的文件
|23.3| 加密
|23.4| 二进制文件
|23.5| 压缩文件
下一章: |usr_24.txt| 快速插入
前一章: |usr_22.txt| 寻找要编辑的文件
目录: |usr_toc.txt|
==============================================================================
*23.1* DOS、Mac 和 Unix 文件
很久以前,老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称
为回车,<CR>),另一个字符把纸上移一行 (称为换行,<LF>)。
当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行
尾。UNIX 开发者决定他们可以用 <Line Feed> 一个字符来表示行尾。Apple 开发者规定
了用 <CR>。开发 MS-DOS (以及微软视窗) 的那些家伙则决定沿用老式的 <CR><LF>。
那意味着,如果你试图把一个文件从一种系统移到另一种系统,那么你就有换行符方
面的麻烦。Vim 编辑器自动识别不同文件格式,并且不劳你操心就把事情给办妥了。
选项 'fileformats' 包含各种各样的格式,Vim 会在编辑一个新文件之初尝试该选项
定义的各种格式。例如,下面这个命令告诉 Vim 先尝试用 UNIX 格式,其次,尝试
MS-DOS 格式: >
:set fileformats=unix,dos
编辑一个文件时,你将注意到 Vim 给出的信息消息报中包括文件所用的格式。如果你编
辑的是本地格式文件 (你编辑的文件格式和所用系统一致),你就不会看到任何格式名。
因此在 Unix 系统上编辑一个 Unix 格式文件不会产生任何关于格式的信息。但你若编辑
一个 dos 文件,Vim 将这样通知你:
"/tmp/test" [dos] 3L,71C ~
如果是 Mac 文件,你会看到 "[mac]"。
探测到的文件格式会被存入 'fileformat' 选项。执行下面这个命令可以显示你当前
使用的文件格式: >
:set fileformat?
Vim 能使用的三种格式如下:
unix <LF>
dos <CR><LF>
mac <CR>
使 用 MAC 格 式
在 Unix 上,<LF> 用于分行。但 <CR> 字符混在文本行中间也非罕见。这种情况碰巧经
常发生在 Vi (和 Vim) 脚本内。
在采用 <CR> 作为换行符的 Macintosh 上,<LF> 字符也有可能混在文本行中间。
结果,很难 100% 肯定一个同时包含 <CR> 和 <LF> 的文件究竟是 Mac 还是 Unix 格
式。所以,Vim 假设你一般不会在 Unix 上编辑一个 Mac 文件,所以干脆对这种文件格
式不作检查。果真要检查此种格式,就把 "mac" 加入 'fileformats': >
:set fileformats+=mac
然后 Vim 就会猜测文件格式。要当心, Vim 可能会猜错的。
强 制 格 式
如果你用往日美好的 Vi 来尝试编辑一个采用 MS-DOS 格式的文件,你将会发现每一行的
末尾有个 ^M 字符。(^M 就是 <CR>)。而 Vim 的自动探测功能就避免了这个问题。莫非
你确实要按那个样子来编辑这个文件吗?那么你需要强制 Vim 忽略文件格式而使用你指
定的格式: >
:edit ++ff=unix file.txt
字符串 "++" 告诉 Vim 后面跟的是选项名,以取代其默认值。但仅作用于这一个命令。
"++ff" 用于 'fileformat' 选项。你也可以用 "++ff=mac" 或 "++ff=dos"。
这样用法并非适用于任意选项,目前 Vim 仅仅实现了 "++ff" 和 "++enc"。用全称
"++fileformat" 和 "++encoding" 也行。
转 换
你可以用 'fileformat' 选项把文件从一种格式转换为另一种。例如,假定你有个名为
README.TXT 的 MS-DOS 文件,你要把它转换成 UNIX 格式。首先编辑这个采用 MS-DOS
格式的文件: >
vim README.TXT
Vim 将识别出那是一个 dos 格式文件。现在把这个文件的格式改为 UNIX: >
:set fileformat=unix
:write
这个文件就以 Unix 格式存盘了。
==============================================================================
*23.2* 互联网上的文件
有人给你传送了一封电子邮件,其中引用了一个以超链接 URL 表示的文件。例如:
You can find the information here: ~
ftp://ftp.vim.org/pub/vim/README ~
你当然可以启动一个程序来下载这个文件,把它存入你本地磁盘,然后启动 Vim 来编辑
它。
但有一个简单得多的方法。把光标移到那个超链接里任何一个字符上,然后使用这个
命令: >
gf
运气好的话,Vim 将确定用哪个程序来下载这个文件,并把文件下载下来让你编辑该副
本。在另一个新窗口打开这个文件,则用 CTRL-W f。
如果事情不顺利的话,你会得到出错信息。可能那个链接有错,也可能你没有阅读它
的权限,还可能网络连接中断了,等等。不幸的是,很难讲搞清除出错的原因。你也许得
尝试以手工方法来下载这个文件。
访问因特网上的文件要安装插件 netrw 才行。目前,下面这些格式的超文本链接可被识
别:
ftp:// 使用 ftp
rcp:// 使用 rcp
scp:// 使用 scp
http:// 使用 wget (只读)
Vim 并非亲自与因特网联系。它有赖于你的计算机上安装好的上面提及的程序。大多数
Unix 系统上装有 "ftp" 和 "rcp"。而 "scp" 和 "wget" 也许要另外安装。
无论你用哪个命令开始编辑,Vim 总是会探测一下这些超文本链接。包括如 ":edit" 和
":split" 这样的命令。存盘命令也行,但除了 http:// 之外。
欲知详情,包括密码问题,参见 |netrw|。
==============================================================================
*23.3* 加密
有些信息你希望保留给自己。例如,当你在计算机上写一份给学生用的试卷。你不会愿意
在考试开始之前给聪明的学生琢磨出一种偷阅试题的方法。Vim 能为你给文件加密,为你
提供一些保护。
要开始编辑一个需要加密的新文件,可以用 "-x" 参数来启动 Vim。例如: >
vim -x exam.txt
Vim 提示你确定一个密码,用于为文件加密和解密:
Enter encryption key: ~
(译者注: 中文是
输入密码: ~
)
现在仔细键入那个密码。你所键入的字符将为星号代替,因此你看不到。为了避免由于打
字错误引起麻烦,Vim 要求你再输入一次密码:
Enter same key again: ~
(译者注: 中文是
请再输入一次: ~
)
现在你可以像平时一样编辑这个文件并把你所有的秘密放进去。当你编完文件要退出 Vim
时,这个文件就被加密存盘了。
当你用 Vim 编辑这个文件时,它就会要求你再输入那同一个密码。你不需要用 "-x"
参数。你也可以用普通的 ":edit" 命令编辑加密的文件。Vim 给这个文件加上特定的
magic 字符串,据以识别那是经过加密的文件。
如果你试图用另一个程序来阅读这个文件,你将读到一堆垃圾。如果你用 Vim 来编辑
这个文件,但输入了错误的密码,你也只能得到垃圾。Vim 并不具备检验密码正确性的机
理 (这一点使得破译密码更为困难)。
开 / 关 加 密
要给一个文件撤除加密,设定 'key' 选项为空字符串:
>
:set key=
你下次把这个文件存盘时,存盘的文件就是未经加密的。
设定 'key' 选项来启用加密是个坏主意。因为密码会被清清楚楚地显示在屏幕上。任
何人都可以偷看到你的密码。
为了避免这样的问题,创造了 ":X" 命令。它会像 "-x" 参数向你索取一个密码: >
:X
Enter encryption key: ******
Enter same key again: ******
加 密 的 局 限 性
Vim 采用的加密算法有弱点的。它对于防止那种偷窥者是绰绰有余了,但不足以防止一个
手上有大量时间的密码专家。而且,你应该知道交换文件是不加密的;所以当你在编辑文
件时,拥有超级用户权限的人能够读取未经加密的文件文本。
不让人们读到你的交换文件的一个方法就是不使用交换文件。如果在命令行上用了 -n
参数,交换文件就不会被创建了 (Vim 把所有的东西都存放在内存里)。例如,要编辑经
过加密的文件 "file.txt",但不用交换文件,请用下面的命令: >
vim -x -n file.txt
如果你已经在编辑这个文件了,那么交换文件 swapfile 可以用下面的命令禁止: >
:setlocal noswapfile
由于没了交换文件,文件复原就不可能了。为了避免失去编辑的成果,要比平时更勤快地
存盘你的文件。
文件在内存中以明文形式存在。因此任何具备权限的人都能进入编辑者的内存浏览,从
而,发现这个文件的内容。
如果你使用信息文件 viminfo,别忘了文本寄存器的内容也是明明白白写在其中的。
如果你真的要保证一个文件内容的安全,那么,你必须永远只在一个不联网的可携式
计算机上编辑这个文件,使用优良的加密工具,并且在不用时,把你的计算机锁进一个大
保险箱。
==============================================================================
*23.4* 二进制文件
你可以用 Vim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读
取一个文件,改动一个字符,然后把它存盘。结果是你的文件就只有那一个字符给改了,
其它的就跟原来那个一模一样。
要保证 Vim 别把它那些聪明的窍门用错地方,启动 Vim 时加上 "-b" 参数: >
vim -b datafile
这个参数设定了 'binary' 选项。其作用是排除所有的意外副作用。例如,'textwidth'
设为零,免得文本行给擅自排版了。并且,文件一律以 Unix 文件格式读取。
二进制模式可以用来修改某程序的消息报文。小心别插入或删除任何字符,那会让程序运
行出问题。用 "R" 命令进入替换模式。
文件里的很多字符都是不可显示的。用 Hex 格式来显示它们的值: >
:set display=uhex
另外,也可以用命令 "ga" 来显示光标下的字符值。当光标位于一个 <Esc> 字符上时,
该命令的输出看起来就像这样:
<^[> 27, Hex 1b, Octal 033 ~
文件中也许没那么多换行符。你可以关闭 'wrap' 选项来获得总览的效果: >
:set nowrap
字 节 位 置
要发现你在文件中的当前字节位置,请用这个命令: >
g CTRL-G
其输出十分冗长:
Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 ~
最后两个数字就是文件中的当前字节位置和文件字节总数。这已经考虑了 'fileformat'
选项导致换行符字节不同的影响。
要移到文件中某个指定的字节,请用 "go" 命令。例如,要移到字节 2345: >
2345go
使 用 XXD
一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你可以在 Vim
里通过转换程序 "xxd" 来达到这效果。该程序是随 Vim 一起发布的。
首先以二进制方式编辑这个文件: >
vim -b datafile
现在用 xxd 把这个文件转换成十六进制: >
:%!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. ~
现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。
修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。
最后,用下面的命令把它转换回来:
>
:%!xxd -r
只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。
欲知更多详情,参见 xxd 手册。
==============================================================================
*23.5* 压缩文件
这很容易: 你可以像编辑任何其它文件一样,来编辑一个经过压缩的文件。插件 "gzip"
负责在你编辑这个文件时把它解压缩,以及在你存盘时再把它压缩起来。
目前支持的压缩方法有下面这些:
.Z compress
.gz gzip
.bz2 bzip2
Vim 调用上面提到的程序来实际完成压缩和解压缩。你也许需要先安装这些程序。
==============================================================================
下一章: |usr_24.txt| 快速插入
版权: 参见 |manual-copyright| vim:tw=78:ts=8:ft=help:norl: