23305
|
1 *usr_23.txt* For Vim version 8.2. Last change: 2020 Dec 19
|
7
|
2
|
|
3 VIM USER MANUAL - by Bram Moolenaar
|
|
4
|
|
5 Editing other files
|
|
6
|
|
7
|
|
8 This chapter is about editing files that are not ordinary files. With Vim you
|
|
9 can edit files that are compressed or encrypted. Some files need to be
|
|
10 accessed over the internet. With some restrictions, binary files can be
|
|
11 edited as well.
|
|
12
|
|
13 |23.1| DOS, Mac and Unix files
|
|
14 |23.2| Files on the internet
|
|
15 |23.3| Encryption
|
|
16 |23.4| Binary files
|
|
17 |23.5| Compressed files
|
|
18
|
|
19 Next chapter: |usr_24.txt| Inserting quickly
|
|
20 Previous chapter: |usr_22.txt| Finding the file to edit
|
|
21 Table of contents: |usr_toc.txt|
|
|
22
|
|
23 ==============================================================================
|
|
24 *23.1* DOS, Mac and Unix files
|
|
25
|
|
26 Back in the early days, the old Teletype machines used two characters to
|
|
27 start a new line. One to move the carriage back to the first position
|
|
28 (carriage return, <CR>), another to move the paper up (line feed, <LF>).
|
|
29 When computers came out, storage was expensive. Some people decided that
|
|
30 they did not need two characters for end-of-line. The UNIX people decided
|
23305
|
31 they could use <New Line> or <NL> only for end-of-line. The Apple people
|
|
32 standardized on <CR>. The Microsoft Windows folks decided to keep the old
|
|
33 <CR><NL> (we use <NL> for line feed in the help text).
|
7
|
34 This means that if you try to move a file from one system to another, you
|
|
35 have line-break problems. The Vim editor automatically recognizes the
|
|
36 different file formats and handles things properly behind your back.
|
|
37 The option 'fileformats' contains the various formats that will be tried
|
|
38 when a new file is edited. The following command, for example, tells Vim to
|
|
39 try UNIX format first and MS-DOS format second: >
|
|
40
|
|
41 :set fileformats=unix,dos
|
|
42
|
|
43 You will notice the format in the message you get when editing a file. You
|
|
44 don't see anything if you edit a native file format. Thus editing a Unix file
|
|
45 on Unix won't result in a remark. But when you edit a dos file, Vim will
|
|
46 notify you of this:
|
|
47
|
|
48 "/tmp/test" [dos] 3L, 71C ~
|
|
49
|
|
50 For a Mac file you would see "[mac]".
|
|
51 The detected file format is stored in the 'fileformat' option. To see
|
|
52 which format you have, execute the following command: >
|
|
53
|
|
54 :set fileformat?
|
|
55
|
|
56 The three names that Vim uses are:
|
|
57
|
23305
|
58 unix <NL>
|
|
59 dos <CR><NL>
|
7
|
60 mac <CR>
|
|
61
|
|
62
|
|
63 USING THE MAC FORMAT
|
|
64
|
23305
|
65 On Unix, <NL> is used to break a line. It's not unusual to have a <CR>
|
7
|
66 character halfway a line. Incidentally, this happens quite often in Vi (and
|
|
67 Vim) scripts.
|
|
68 On the Macintosh, where <CR> is the line break character, it's possible to
|
23305
|
69 have a <NL> character halfway a line.
|
7
|
70 The result is that it's not possible to be 100% sure whether a file
|
23305
|
71 containing both <CR> and <NL> characters is a Mac or a Unix file. Therefore,
|
7
|
72 Vim assumes that on Unix you probably won't edit a Mac file, and doesn't check
|
|
73 for this type of file. To check for this format anyway, add "mac" to
|
|
74 'fileformats': >
|
|
75
|
|
76 :set fileformats+=mac
|
|
77
|
|
78 Then Vim will take a guess at the file format. Watch out for situations where
|
|
79 Vim guesses wrong.
|
|
80
|
|
81
|
|
82 OVERRULING THE FORMAT
|
|
83
|
|
84 If you use the good old Vi and try to edit an MS-DOS format file, you will
|
237
|
85 find that each line ends with a ^M character. (^M is <CR>). The automatic
|
7
|
86 detection avoids this. Suppose you do want to edit the file that way? Then
|
|
87 you need to overrule the format: >
|
|
88
|
|
89 :edit ++ff=unix file.txt
|
|
90
|
|
91 The "++" string is an item that tells Vim that an option name follows, which
|
|
92 overrules the default for this single command. "++ff" is used for
|
|
93 'fileformat'. You could also use "++ff=mac" or "++ff=dos".
|
|
94 This doesn't work for any option, only "++ff" and "++enc" are currently
|
|
95 implemented. The full names "++fileformat" and "++encoding" also work.
|
|
96
|
|
97
|
|
98 CONVERSION
|
|
99
|
|
100 You can use the 'fileformat' option to convert from one file format to
|
|
101 another. Suppose, for example, that you have an MS-DOS file named README.TXT
|
|
102 that you want to convert to UNIX format. Start by editing the MS-DOS format
|
|
103 file: >
|
|
104 vim README.TXT
|
|
105
|
|
106 Vim will recognize this as a dos format file. Now change the file format to
|
|
107 UNIX: >
|
|
108
|
|
109 :set fileformat=unix
|
|
110 :write
|
|
111
|
|
112 The file is written in Unix format.
|
|
113
|
|
114 ==============================================================================
|
|
115 *23.2* Files on the internet
|
|
116
|
|
117 Someone sends you an e-mail message, which refers to a file by its URL. For
|
|
118 example:
|
|
119
|
|
120 You can find the information here: ~
|
|
121 ftp://ftp.vim.org/pub/vim/README ~
|
|
122
|
|
123 You could start a program to download the file, save it on your local disk and
|
|
124 then start Vim to edit it.
|
|
125 There is a much simpler way. Move the cursor to any character of the URL.
|
|
126 Then use this command: >
|
|
127
|
|
128 gf
|
|
129
|
|
130 With a bit of luck, Vim will figure out which program to use for downloading
|
|
131 the file, download it and edit the copy. To open the file in a new window use
|
|
132 CTRL-W f.
|
|
133 If something goes wrong you will get an error message. It's possible that
|
|
134 the URL is wrong, you don't have permission to read it, the network connection
|
|
135 is down, etc. Unfortunately, it's hard to tell the cause of the error. You
|
|
136 might want to try the manual way of downloading the file.
|
|
137
|
|
138 Accessing files over the internet works with the netrw plugin. Currently URLs
|
|
139 with these formats are recognized:
|
|
140
|
|
141 ftp:// uses ftp
|
|
142 rcp:// uses rcp
|
|
143 scp:// uses scp
|
|
144 http:// uses wget (reading only)
|
|
145
|
|
146 Vim doesn't do the communication itself, it relies on the mentioned programs
|
|
147 to be available on your computer. On most Unix systems "ftp" and "rcp" will
|
|
148 be present. "scp" and "wget" might need to be installed.
|
|
149
|
|
150 Vim detects these URLs for each command that starts editing a new file, also
|
|
151 with ":edit" and ":split", for example. Write commands also work, except for
|
|
152 http://.
|
|
153
|
|
154 For more information, also about passwords, see |netrw|.
|
|
155
|
|
156 ==============================================================================
|
|
157 *23.3* Encryption
|
|
158
|
|
159 Some information you prefer to keep to yourself. For example, when writing
|
|
160 a test on a computer that students also use. You don't want clever students
|
|
161 to figure out a way to read the questions before the exam starts. Vim can
|
|
162 encrypt the file for you, which gives you some protection.
|
|
163 To start editing a new file with encryption, use the "-x" argument to start
|
|
164 Vim. Example: >
|
|
165
|
|
166 vim -x exam.txt
|
|
167
|
|
168 Vim prompts you for a key used for encrypting and decrypting the file:
|
|
169
|
|
170 Enter encryption key: ~
|
|
171
|
|
172 Carefully type the secret key now. You cannot see the characters you type,
|
|
173 they will be replaced by stars. To avoid the situation that a typing mistake
|
|
174 will cause trouble, Vim asks you to enter the key again:
|
|
175
|
|
176 Enter same key again: ~
|
|
177
|
|
178 You can now edit this file normally and put in all your secrets. When you
|
|
179 finish editing the file and tell Vim to exit, the file is encrypted and
|
|
180 written.
|
|
181 When you edit the file with Vim, it will ask you to enter the same key
|
|
182 again. You don't need to use the "-x" argument. You can also use the normal
|
|
183 ":edit" command. Vim adds a magic string to the file by which it recognizes
|
|
184 that the file was encrypted.
|
|
185 If you try to view this file using another program, all you get is garbage.
|
|
186 Also, if you edit the file with Vim and enter the wrong key, you get garbage.
|
|
187 Vim does not have a mechanism to check if the key is the right one (this makes
|
|
188 it much harder to break the key).
|
|
189
|
|
190
|
|
191 SWITCHING ENCRYPTION ON AND OFF
|
|
192
|
|
193 To disable the encryption of a file, set the 'key' option to an empty string:
|
|
194 >
|
|
195 :set key=
|
|
196
|
|
197 The next time you write the file this will be done without encryption.
|
|
198 Setting the 'key' option to enable encryption is not a good idea, because
|
|
199 the password appears in the clear. Anyone shoulder-surfing can read your
|
|
200 password.
|
|
201 To avoid this problem, the ":X" command was created. It asks you for an
|
|
202 encryption key, just like the "-x" argument did: >
|
|
203
|
|
204 :X
|
|
205 Enter encryption key: ******
|
|
206 Enter same key again: ******
|
|
207
|
|
208
|
|
209 LIMITS ON ENCRYPTION
|
|
210
|
14999
|
211 The encryption algorithm used by Vim is not very strong. It is good enough to
|
|
212 keep out the casual prowler, but not good enough to keep out a cryptology
|
|
213 expert with lots of time on his hands. The text in the swap file and the undo
|
|
214 file is also encrypted. However, this is done block-by-block and may reduce
|
|
215 the time needed to crack a password. You can disable the swap file, but then
|
|
216 a crash will cause you to lose your work, since Vim keeps all the text in
|
|
217 memory only. The undo file can be disabled with the only disadvantage that
|
|
218 you can't undo after unloading the buffer.
|
|
219 To avoid using a swap file, supply the -n argument on the command line.
|
|
220 For example, to edit the encrypted file "file.txt" without a swap file use the
|
|
221 following command: >
|
7
|
222
|
|
223 vim -x -n file.txt
|
|
224
|
|
225 When already editing a file, the swapfile can be disabled with: >
|
|
226
|
|
227 :setlocal noswapfile
|
|
228
|
|
229 Since there is no swapfile, recovery will be impossible. Save the file a bit
|
|
230 more often to avoid the risk of losing your changes.
|
|
231
|
|
232 While the file is in memory, it is in plain text. Anyone with privilege can
|
|
233 look in the editor's memory and discover the contents of the file.
|
|
234 If you use a viminfo file, be aware that the contents of text registers are
|
|
235 written out in the clear as well.
|
|
236 If you really want to secure the contents of a file, edit it only on a
|
|
237 portable computer not connected to a network, use good encryption tools, and
|
|
238 keep the computer locked up in a big safe when not in use.
|
|
239
|
|
240 ==============================================================================
|
|
241 *23.4* Binary files
|
|
242
|
|
243 You can edit binary files with Vim. Vim wasn't really made for this, thus
|
|
244 there are a few restrictions. But you can read a file, change a character and
|
|
245 write it back, with the result that only that one character was changed and
|
|
246 the file is identical otherwise.
|
|
247 To make sure that Vim does not use its clever tricks in the wrong way, add
|
|
248 the "-b" argument when starting Vim: >
|
|
249
|
|
250 vim -b datafile
|
|
251
|
|
252 This sets the 'binary' option. The effect of this is that unexpected side
|
|
253 effects are turned off. For example, 'textwidth' is set to zero, to avoid
|
|
254 automatic formatting of lines. And files are always read in Unix file format.
|
|
255
|
|
256 Binary mode can be used to change a message in a program. Be careful not to
|
|
257 insert or delete any characters, it would stop the program from working. Use
|
|
258 "R" to enter replace mode.
|
|
259
|
|
260 Many characters in the file will be unprintable. To see them in Hex format: >
|
|
261
|
|
262 :set display=uhex
|
|
263
|
|
264 Otherwise, the "ga" command can be used to see the value of the character
|
|
265 under the cursor. The output, when the cursor is on an <Esc>, looks like
|
|
266 this:
|
|
267
|
|
268 <^[> 27, Hex 1b, Octal 033 ~
|
|
269
|
|
270 There might not be many line breaks in the file. To get some overview switch
|
|
271 the 'wrap' option off: >
|
|
272
|
|
273 :set nowrap
|
|
274
|
|
275
|
|
276 BYTE POSITION
|
|
277
|
|
278 To see on which byte you are in the file use this command: >
|
|
279
|
|
280 g CTRL-G
|
|
281
|
|
282 The output is verbose:
|
|
283
|
|
284 Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 ~
|
|
285
|
|
286 The last two numbers are the byte position in the file and the total number of
|
|
287 bytes. This takes into account how 'fileformat' changes the number of bytes
|
|
288 that a line break uses.
|
|
289 To move to a specific byte in the file, use the "go" command. For
|
|
290 example, to move to byte 2345: >
|
|
291
|
|
292 2345go
|
|
293
|
|
294
|
|
295 USING XXD
|
|
296
|
|
297 A real binary editor shows the text in two ways: as it is and in hex format.
|
|
298 You can do this in Vim by first converting the file with the "xxd" program.
|
|
299 This comes with Vim.
|
|
300 First edit the file in binary mode: >
|
|
301
|
|
302 vim -b datafile
|
|
303
|
|
304 Now convert the file to a hex dump with xxd: >
|
|
305
|
|
306 :%!xxd
|
|
307
|
|
308 The text will look like this:
|
|
309
|
|
310 0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI ~
|
|
311 0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0 ~
|
|
312 0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59. ~
|
|
313
|
|
314 You can now view and edit the text as you like. Vim treats the information as
|
|
315 ordinary text. Changing the hex does not cause the printable character to be
|
|
316 changed, or the other way around.
|
|
317 Finally convert it back with:
|
|
318 >
|
|
319 :%!xxd -r
|
|
320
|
|
321 Only changes in the hex part are used. Changes in the printable text part on
|
|
322 the right are ignored.
|
|
323
|
|
324 See the manual page of xxd for more information.
|
|
325
|
|
326 ==============================================================================
|
|
327 *23.5* Compressed files
|
|
328
|
|
329 This is easy: You can edit a compressed file just like any other file. The
|
|
330 "gzip" plugin takes care of decompressing the file when you edit it. And
|
|
331 compressing it again when you write it.
|
|
332 These compression methods are currently supported:
|
|
333
|
|
334 .Z compress
|
|
335 .gz gzip
|
|
336 .bz2 bzip2
|
|
337
|
|
338 Vim uses the mentioned programs to do the actual compression and
|
|
339 decompression. You might need to install the programs first.
|
|
340
|
|
341 ==============================================================================
|
|
342
|
|
343 Next chapter: |usr_24.txt| Inserting quickly
|
|
344
|
14519
|
345 Copyright: see |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl:
|