Mercurial > vim
annotate runtime/doc/usr_23.txt @ 34357:ecbf997354a1
Added tag v9.1.0109 for changeset 0f62958d90dd100fae1a830768a50a58b0ef214a
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 14 Feb 2024 21:45:04 +0100 |
parents | 4635e43f2c6f |
children |
rev | line source |
---|---|
34057
4635e43f2c6f
patch 9.1.0000: Vim 9.1 release
Christian Brabandt <cb@256bit.org>
parents:
29314
diff
changeset
|
1 *usr_23.txt* For Vim version 9.1. 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: |