*usr_23.txt*	For Vim version 7.0.  Last change: 2006 Apr 24

		     VIM USER MANUAL - by Bram Moolenaar

			     Editing other files


This chapter is about editing files that are not ordinary files.  With Vim you
can edit files that are compressed or encrypted.  Some files need to be
accessed over the internet.  With some restrictions, binary files can be
edited as well.

|23.1|	DOS, Mac and Unix files
|23.2|	Files on the internet
|23.3|	Encryption
|23.4|	Binary files
|23.5|	Compressed files

     Next chapter: |usr_24.txt|  Inserting quickly
 Previous chapter: |usr_22.txt|  Finding the file to edit
Table of contents: |usr_toc.txt|

==============================================================================
*23.1*	DOS, Mac and Unix files

Back in the early days, the old Teletype machines used two characters to
start a new line.  One to move the carriage back to the first position
(carriage return, <CR>), another to move the paper up (line feed, <LF>).
   When computers came out, storage was expensive.  Some people decided that
they did not need two characters for end-of-line.  The UNIX people decided
they could use <Line Feed> only for end-of-line.  The Apple people
standardized on <CR>.  The MS-DOS (and Microsoft Windows) folks decided to
keep the old <CR><LF>.
   This means that if you try to move a file from one system to another, you
have line-break problems.  The Vim editor automatically recognizes the
different file formats and handles things properly behind your back.
   The option 'fileformats' contains the various formats that will be tried
when a new file is edited.  The following command, for example, tells Vim to
try UNIX format first and MS-DOS format second: >

	:set fileformats=unix,dos

You will notice the format in the message you get when editing a file.  You
don't see anything if you edit a native file format.  Thus editing a Unix file
on Unix won't result in a remark.  But when you edit a dos file, Vim will
notify you of this:

	"/tmp/test" [dos] 3L, 71C ~

For a Mac file you would see "[mac]".
   The detected file format is stored in the 'fileformat' option.  To see
which format you have, execute the following command: >

	:set fileformat?

The three names that Vim uses are:

	unix		<LF>
	dos		<CR><LF>
	mac		<CR>


USING THE MAC FORMAT

On Unix, <LF> is used to break a line.  It's not unusual to have a <CR>
character halfway a line.  Incidentally, this happens quite often in Vi (and
Vim) scripts.
   On the Macintosh, where <CR> is the line break character, it's possible to
have a <LF> character halfway a line.
   The result is that it's not possible to be 100% sure whether a file
containing both <CR> and <LF> characters is a Mac or a Unix file.  Therefore,
Vim assumes that on Unix you probably won't edit a Mac file, and doesn't check
for this type of file.  To check for this format anyway, add "mac" to
'fileformats': >

	:set fileformats+=mac

Then Vim will take a guess at the file format.  Watch out for situations where
Vim guesses wrong.


OVERRULING THE FORMAT

If you use the good old Vi and try to edit an MS-DOS format file, you will
find that each line ends with a ^M character.  (^M is <CR>).  The automatic
detection avoids this.  Suppose you do want to edit the file that way?  Then
you need to overrule the format: >

	:edit ++ff=unix file.txt

The "++" string is an item that tells Vim that an option name follows, which
overrules the default for this single command.  "++ff" is used for
'fileformat'.  You could also use "++ff=mac" or "++ff=dos".
   This doesn't work for any option, only "++ff" and "++enc" are currently
implemented.  The full names "++fileformat" and "++encoding" also work.


CONVERSION

You can use the 'fileformat' option to convert from one file format to
another.  Suppose, for example, that you have an MS-DOS file named README.TXT
that you want to convert to UNIX format.  Start by editing the MS-DOS format
file: >
	vim README.TXT

Vim will recognize this as a dos format file.  Now change the file format to
UNIX: >

	:set fileformat=unix
	:write

The file is written in Unix format.

==============================================================================
*23.2*	Files on the internet

Someone sends you an e-mail message, which refers to a file by its URL.  For
example:

	You can find the information here: ~
		ftp://ftp.vim.org/pub/vim/README ~

You could start a program to download the file, save it on your local disk and
then start Vim to edit it.
   There is a much simpler way.  Move the cursor to any character of the URL.
Then use this command: >

	gf

With a bit of luck, Vim will figure out which program to use for downloading
the file, download it and edit the copy.  To open the file in a new window use
CTRL-W f.
   If something goes wrong you will get an error message.  It's possible that
the URL is wrong, you don't have permission to read it, the network connection
is down, etc.  Unfortunately, it's hard to tell the cause of the error.  You
might want to try the manual way of downloading the file.

Accessing files over the internet works with the netrw plugin.  Currently URLs
with these formats are recognized:

	ftp://		uses ftp
	rcp://		uses rcp
	scp://		uses scp
	http://		uses wget (reading only)

Vim doesn't do the communication itself, it relies on the mentioned programs
to be available on your computer.  On most Unix systems "ftp" and "rcp" will
be present.  "scp" and "wget" might need to be installed.

Vim detects these URLs for each command that starts editing a new file, also
with ":edit" and ":split", for example.  Write commands also work, except for
http://.

For more information, also about passwords, see |netrw|.

==============================================================================
*23.3*	Encryption

Some information you prefer to keep to yourself.  For example, when writing
a test on a computer that students also use.  You don't want clever students
to figure out a way to read the questions before the exam starts.  Vim can
encrypt the file for you, which gives you some protection.
   To start editing a new file with encryption, use the "-x" argument to start
Vim.  Example: >

	vim -x exam.txt

Vim prompts you for a key used for encrypting and decrypting the file:

	Enter encryption key: ~

Carefully type the secret key now.  You cannot see the characters you type,
they will be replaced by stars.  To avoid the situation that a typing mistake
will cause trouble, Vim asks you to enter the key again:

	Enter same key again: ~

You can now edit this file normally and put in all your secrets.  When you
finish editing the file and tell Vim to exit, the file is encrypted and
written.
   When you edit the file with Vim, it will ask you to enter the same key
again.  You don't need to use the "-x" argument.  You can also use the normal
":edit" command.  Vim adds a magic string to the file by which it recognizes
that the file was encrypted.
   If you try to view this file using another program, all you get is garbage.
Also, if you edit the file with Vim and enter the wrong key, you get garbage.
Vim does not have a mechanism to check if the key is the right one (this makes
it much harder to break the key).


SWITCHING ENCRYPTION ON AND OFF

To disable the encryption of a file, set the 'key' option to an empty string:
>
	:set key=

The next time you write the file this will be done without encryption.
   Setting the 'key' option to enable encryption is not a good idea, because
the password appears in the clear.  Anyone shoulder-surfing can read your
password.
   To avoid this problem, the ":X" command was created.  It asks you for an
encryption key, just like the "-x" argument did: >

	:X
	Enter encryption key: ******
	Enter same key again: ******


LIMITS ON ENCRYPTION

The encryption algorithm used by Vim is weak.  It is good enough to keep out
the casual prowler, but not good enough to keep out a cryptology expert with
lots of time on his hands.  Also you should be aware that the swap file is not
encrypted; so while you are editing, people with superuser privileges can read
the unencrypted text from this file.
   One way to avoid letting people read your swap file is to avoid using one.
If the -n argument is supplied on the command line, no swap file is used
(instead, Vim puts everything in memory).  For example, to edit the encrypted
file "file.txt" without a swap file use the following command: >

	vim -x -n file.txt

When already editing a file, the swapfile can be disabled with: >

	:setlocal noswapfile

Since there is no swapfile, recovery will be impossible.  Save the file a bit
more often to avoid the risk of losing your changes.

While the file is in memory, it is in plain text.  Anyone with privilege can
look in the editor's memory and discover the contents of the file.
   If you use a viminfo file, be aware that the contents of text registers are
written out in the clear as well.
   If you really want to secure the contents of a file, edit it only on a
portable computer not connected to a network, use good encryption tools, and
keep the computer locked up in a big safe when not in use.

==============================================================================
*23.4*	Binary files

You can edit binary files with Vim.  Vim wasn't really made for this, thus
there are a few restrictions.  But you can read a file, change a character and
write it back, with the result that only that one character was changed and
the file is identical otherwise.
   To make sure that Vim does not use its clever tricks in the wrong way, add
the "-b" argument when starting Vim: >

	vim -b datafile

This sets the 'binary' option.  The effect of this is that unexpected side
effects are turned off.  For example, 'textwidth' is set to zero, to avoid
automatic formatting of lines.  And files are always read in Unix file format.

Binary mode can be used to change a message in a program.  Be careful not to
insert or delete any characters, it would stop the program from working.  Use
"R" to enter replace mode.

Many characters in the file will be unprintable.  To see them in Hex format: >

	:set display=uhex

Otherwise, the "ga" command can be used to see the value of the character
under the cursor.  The output, when the cursor is on an <Esc>, looks like
this:

	<^[>  27,  Hex 1b,  Octal 033 ~

There might not be many line breaks in the file.  To get some overview switch
the 'wrap' option off: >

	:set nowrap


BYTE POSITION

To see on which byte you are in the file use this command: >

	g CTRL-G

The output is verbose:

    Col 9-16 of 9-16; Line 277 of 330; Word 1806 of 2058; Byte 10580 of 12206 ~

The last two numbers are the byte position in the file and the total number of
bytes.  This takes into account how 'fileformat' changes the number of bytes
that a line break uses.
    To move to a specific byte in the file, use the "go" command.  For
example, to move to byte 2345: >

	2345go


USING XXD

A real binary editor shows the text in two ways: as it is and in hex format.
You can do this in Vim by first converting the file with the "xxd" program.
This comes with Vim.
   First edit the file in binary mode: >

	vim -b datafile

Now convert the file to a hex dump with xxd: >

	:%!xxd

The text will look like this:

	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. ~

You can now view and edit the text as you like.  Vim treats the information as
ordinary text.  Changing the hex does not cause the printable character to be
changed, or the other way around.
   Finally convert it back with:
>
	:%!xxd -r

Only changes in the hex part are used.  Changes in the printable text part on
the right are ignored.

See the manual page of xxd for more information.

==============================================================================
*23.5*	Compressed files

This is easy: You can edit a compressed file just like any other file.  The
"gzip" plugin takes care of decompressing the file when you edit it.  And
compressing it again when you write it.
   These compression methods are currently supported:

	.Z	compress
	.gz	gzip
	.bz2	bzip2

Vim uses the mentioned programs to do the actual compression and
decompression.  You might need to install the programs first.

==============================================================================

Next chapter: |usr_24.txt|  Inserting quickly

Copyright: see |manual-copyright|  vim:tw=78:ts=8:ft=help:norl:
