*pi_netrw.txt*  For Vim version 7.1.  Last change: 2007 May 08

	    -----------------------------------------------------
	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
	    -----------------------------------------------------


*dav*           *http*          *network*       *Nwrite*   *netrw-file*
*fetch*         *netrw*         *Nread*         *rcp*      *scp*
*ftp*           *netrw.vim*     *Nsource*       *rsync*    *sftp*

==============================================================================
1. Contents						*netrw-contents*

1.  Contents.............................................|netrw-contents|
2.  Starting With Netrw..................................|netrw-start|
3.  Netrw Reference......................................|netrw-ref|
      CONTROLLING EXTERNAL APPLICATIONS..................|netrw-externapp|
      READING............................................|netrw-read|
      WRITING............................................|netrw-write|
      DIRECTORY LISTING..................................|netrw-dirlist|
      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
      VARIABLES..........................................|netrw-variables|
      PATHS..............................................|netrw-path|
4.  Network-Oriented File Transfer.......................|netrw-xfer|
      NETRC..............................................|netrw-netrc|
      PASSWORD...........................................|netrw-passwd|
5.  Activation...........................................|netrw-activate|
6.  Transparent File Transfer............................|netrw-transparent|
7.  Ex Commands..........................................|netrw-ex|
8.  Variables and Options................................|netrw-var|
9.  Directory Browsing...................................|netrw-browse| {{{1
      Maps...............................................|netrw-maps|
      Exploring..........................................|netrw-explore-cmds|
      Quick Reference Commands Table.....................|netrw-browse-cmds|
      Netrw Browser Variables............................|netrw-browse-var|
      Introduction To Directory Browsing.................|netrw-browse-intro|
      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
      Directory Exploring Commands.......................|netrw-explore|
      Refreshing The Listing.............................|netrw-ctrl-l|
      Going Up...........................................|netrw--|
      Browsing...........................................|netrw-cr|
      Obtaining A File...................................|netrw-O|
      Change Listing Style...............................|netrw-i|
      Making A New Directory.............................|netrw-d|
      Deleting Files Or Directories......................|netrw-D|
      Renaming Files Or Directories......................|netrw-move|
      Hiding Files Or Directories........................|netrw-a|
      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
      Browsing With A Horizontally Split Window..........|netrw-o|
      Browsing With A Vertically Split Window............|netrw-v|
      Browsing With A New Tab............................|netrw-t|
      Preview Window.....................................|netrw-p|
      Selecting Sorting Style............................|netrw-s|
      Editing The Sorting Sequence.......................|netrw-S|
      Reversing Sorting Order............................|netrw-r|
      Changing To A Predecessor Directory................|netrw-u|
      Changing To A Successor Directory..................|netrw-U|
      Customizing Browsing With A User Function..........|netrw-x|
      Making The Browsing Directory The Current Directory|netrw-c|
      Bookmarking A Directory............................|netrw-mb|
      Changing To A Bookmarked Directory.................|netrw-gb|
      Listing Bookmarks And History......................|netrw-q|
      Improving Directory Browsing.......................|netrw-listhack| }}}1
10. Problems and Fixes...................................|netrw-problems|
11. Debugging............................................|netrw-debug|
12. History..............................................|netrw-history|
13. Credits..............................................|netrw-credits|

The Netrw plugin is generally sourced automatically as it is a
|standard-plugin|.  That said, to make use of netrw, one must
have plugins available which can be done with the following
two lines in your <.vimrc>: >

	set nocp                    " 'compatible' is not set
	filetype plugin on          " plugins are enabled
<
You can avoid loading this plugin by setting the "loaded_netrw" variable
in your <.vimrc> file: >

	:let loaded_netrw = 1

{Vi does not have any of this}

==============================================================================
2. Starting With Netrw						*netrw-start*

Netrw makes reading, writing, and browsing over a network connection easy!
First, make sure that you have plugins enabled, so you'll need to have at
least the following in your <.vimrc>: (or see |netrw-activate|) >

	set nocp                    " 'compatible' is not set
	filetype plugin on          " plugins are enabled
<
(see |'cp'| and |:filetype-plugin-on|)

Netrw supports "transparent" editing of files on other machines using urls
(see |netrw-transparent|). As an example of this, let's assume you have an
account on some other machine; try >

	vim scp://hostname/path/to/file
<
if you have an ssh connection.  Want to make ssh/scp easier to use? Check
out |netrw-listhack|!

What if you have ftp, not ssh/scp?  That's easy, too; try >

	vim ftp://hostname/path/to/file
<
Want to make ftp simpler to use?  See if your ftp supports a file called
<.netrc> -- typically it goes in your home directory, has read/write
permissions for only the user to read (ie. not group, world, other, etc),
and has lines resembling >

	machine HOSTNAME login USERID password "PASSWORD"
	machine HOSTNAME login USERID password "PASSWORD"
	...
	default          login USERID password "PASSWORD"
<
Now about browsing -- ie. when you just want to look around before editing a
file.  For browsing on your current host, just "edit" a directory: >

	vim .
	vim /home/userid/path
<
For browsing on a remote host, "edit" a directory (but make sure that
the directory name is followed by a "/"): >

	vim scp://hostname/
	vim ftp://hostname/path/to/dir/
<
See |netrw-browse| for more!

There's more protocols supported than scp and ftp, too: see the next
section, |netrw-externapp|.

==============================================================================
3. Netrw Reference						*netrw-ref*

CONTROLLING EXTERNAL APPLICATIONS			*netrw-externapp*

	Protocol  Variable	    Default Value
	--------  ----------------  -------------
	   dav:    *g:netrw_dav_cmd*  = "cadaver"
	 fetch:  *g:netrw_fetch_cmd*  = "fetch -o"    if fetch is available
	   ftp:    *g:netrw_ftp_cmd*  = "ftp"
	  http:   *g:netrw_http_cmd*  = "curl -o"     if      curl  is available
	  http:    g:netrw_http_cmd   = "wget -q -O"  else if wget  is available
          http:    g:netrw_http_cmd   = "fetch -o"    else if fetch is available
	   rcp:    *g:netrw_rcp_cmd*  = "rcp"
	 rsync:  *g:netrw_rsync_cmd*  = "rsync -a"
	   scp:    *g:netrw_scp_cmd*  = "scp -q"
	  sftp:   *g:netrw_sftp_cmd*  = "sftp"

READING						*netrw-read* *netrw-nread*
	:Nread ?					give help
	:Nread "machine:path"				uses rcp
	:Nread "machine path"				uses ftp w/ <.netrc>
	:Nread "machine id password path"		uses ftp
	:Nread "dav://machine[:port]/path"		uses cadaver
	:Nread "fetch://[user@]machine/path"		uses fetch
	:Nread "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
	:Nread "http://[user@]machine/path"		uses http  uses wget
	:Nread "rcp://[user@]machine/path"		uses rcp
	:Nread "rsync://[user@]machine[:port]/path"	uses rsync
	:Nread "scp://[user@]machine[[:#]port]/path"	uses scp
	:Nread "sftp://[user@]machine/path"		uses sftp

WRITING						*netrw-write* *netrw-nwrite*
	:Nwrite ?					give help
	:Nwrite "machine:path"				uses rcp
	:Nwrite "machine path"				uses ftp w/ <.netrc>
	:Nwrite "machine id password path"		uses ftp
	:Nwrite "dav://machine[:port]/path"		uses cadaver
	:Nwrite "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
	:Nwrite "rcp://[user@]machine/path"		uses rcp
	:Nwrite "rsync://[user@]machine[:port]/path"	uses rsync
	:Nwrite "scp://[user@]machine[[:#]port]/path"	uses scp
	:Nwrite "sftp://[user@]machine/path"		uses sftp
	http: not supported!

SOURCING					*netrw-source*
	:Nsource ?					give help
	:Nsource "dav://machine[:port]/path"		uses cadaver
	:Nsource "fetch://[user@]machine/path"		uses fetch
	:Nsource "ftp://[user@]machine[[:#]port]/path"	uses ftp w/ <.netrc>
	:Nsource "http://[user@]machine/path"		uses http  uses wget
	:Nsource "rcp://[user@]machine/path"		uses rcp
	:Nsource "rsync://[user@]machine[:port]/path"	uses rsync
	:Nsource "scp://[user@]machine[[:#]port]/path"	uses scp
	:Nsource "sftp://[user@]machine/path"		uses sftp

DIRECTORY LISTING					*netrw-dirlist*
	:Nread [protocol]://[user]@hostname/path/

						*netrw-login* *netrw-password*
 CHANGING USERID AND PASSWORD			*netrw-chgup* *netrw-userpass*

	Attempts to use ftp will prompt you for a user-id and a password.
	These will be saved in global variables g:netrw_uid and
	g:netrw_passwd; subsequent uses of ftp will re-use those two items to
	simplify the further use of ftp.  However, if you need to use a
	different user id and/or password, you'll want to call NetUserPass()
	first.  To work around the need to enter passwords, check if your ftp
	supports a <.netrc> file in your home directory.  Also see
	|netrw-passwd| (and if you're using ssh/scp hoping to figure out how
	to not need to use passwords, look at |netrw-listhack|).

	:NetUserPass [uid [password]]		-- prompts as needed
	:call NetUserPass()			-- prompts for uid and password
	:call NetUserPass("uid")		-- prompts for password
	:call NetUserPass("uid","password")	-- sets global uid and password

VARIABLES						*netrw-variables*

(also see: |netrw-browse-var| |netrw-protocol| |netrw-settings| |netrw-var|)

 *b:netrw_lastfile*	last file Network-read/written retained on a per-buffer
			basis		(supports plain :Nw )

 *g:netrw_ftp*		if it doesn't exist, use default ftp
			=0 use default ftp		       (uid password)
			=1 use alternate ftp method	  (user uid password)
			If you're having trouble with ftp, try changing the
			value of this variable to see if the alternate ftp
			method works for your setup.

 *g:netrw_extracmd*	default: doesn't exist
                        If this variable exists, then any string it contains
			will be placed into the commands set to your ftp
			client.  As an example:
			  ="passive"

 *g:netrw_ftpmode*	="binary"				    (default)
			="ascii"

 *g:netrw_ignorenetrc*	=0 (default for linux, cygwin)
			=1 If you have a <.netrc> file but it doesn't work and
			   you want it ignored, then set this variable as shown.
			   (default for Windows + cmd.exe)

 *g:netrw_menu*		=0 disable netrw's menu
			=1 (default) netrw's menu enabled

 *g:netrw_nogx*		if this variable exists, then the "gx" map will not
			be available (see |netrw-gx|)

 *g:netrw_uid*		(ftp) user-id,      retained on a per-session basis
 *g:netrw_passwd*	(ftp) password,     retained on a per-session basis

 *g:netrw_shq*		= "'" for Unix/Linux systems (ie. a single quote)
			= "'" for Windows + cygwin systems (ie. a single quote)
			= '"' for Windows systems, not using cygwin
			      (ie. a double quote)
			Controls the quoting character used during scp and ftp
			commands.

 *g:netrw_scpport*      = "-P" : option to use to set port for scp
 *g:netrw_sshport*      = "-p" : option to use to set port for ssh

 *g:netrw_use_errorwindow* =1 : messages from netrw will use a separate one
                                line window.  This window provides reliable
				delivery of messages. (default)
			   =0 : messages from netrw will use echoerr ;
			        messages don't always seem to show up this
				way, but one doesn't have to quit the window.

 *g:netrw_win95ftp*	=1 if using Win95, will remove four trailing blank
			   lines that o/s's ftp "provides" on transfers
			=0 force normal ftp behavior (no trailing line removal)

 *g:netrw_cygwin*	=1 assume scp under windows is from cygwin. Also
			   permits network browsing to use ls with time and
			   size sorting (default if windows)
			=0 assume Windows' scp accepts windows-style paths
			   Network browsing uses dir instead of ls
			This option is ignored if you're using unix

 *g:netrw_use_nt_rcp*	=0 don't use the rcp of WinNT, Win2000 and WinXP
			=1 use WinNT's rcp in binary mode         (default)

PATHS								*netrw-path*

Paths to files are generally user-directory relative for most protocols.
It is possible that some protocol will make paths relative to some
associated directory, however.
>
	example:  vim scp://user@host/somefile
	example:  vim scp://user@host/subdir1/subdir2/somefile
<
where "somefile" is the "user"'s home directory.  If you wish to get a
file using root-relative paths, use the full path:
>
	example:  vim scp://user@host//somefile
	example:  vim scp://user@host//subdir1/subdir2/somefile
<

==============================================================================
4. Network-Oriented File Transfer				*netrw-xfer*

Network-oriented file transfer under Vim is implemented by a VimL-based script
(<netrw.vim>) using plugin techniques.  It currently supports both reading and
writing across networks using rcp, scp, ftp or ftp+<.netrc>, scp, fetch,
dav/cadaver, rsync, or sftp.

http is currently supported read-only via use of wget or fetch.

<netrw.vim> is a standard plugin which acts as glue between Vim and the
various file transfer programs.  It uses autocommand events (BufReadCmd,
FileReadCmd, BufWriteCmd) to intercept reads/writes with url-like filenames. >

	ex. vim ftp://hostname/path/to/file
<
The characters preceding the colon specify the protocol to use; in the
example, its ftp.  The <netrw.vim> script then formulates a command or a
series of commands (typically ftp) which it issues to an external program
(ftp, scp, etc) which does the actual file transfer/protocol.  Files are read
from/written to a temporary file (under Unix/Linux, /tmp/...) which the
<netrw.vim> script will clean up.

				*netrw-putty* *netrw-pscp* *netrw-psftp*
One may modify any protocol's implementing external application by setting a
variable (ex. scp uses the variable g:netrw_scp_cmd, which is defaulted to
"scp -q").  As an example, consider using PuTTY: >

	let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
	let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
<
See |netrw-p8| for more about putty, pscp, psftp, etc.

Ftp, an old protocol, seems to be blessed by numerous implementations.
Unfortunately, some implementations are noisy (ie., add junk to the end of the
file).  Thus, concerned users may decide to write a NetReadFixup() function
that will clean up after reading with their ftp.  Some Unix systems (ie.,
FreeBSD) provide a utility called "fetch" which uses the ftp protocol but is
not noisy and more convenient, actually, for <netrw.vim> to use.
Consequently, if "fetch" is executable, it will be used to do reads for
ftp://... (and http://...) .  See |netrw-var| for more about this.

For rcp, scp, sftp, and http, one may use network-oriented file transfers
transparently; ie.
>
	vim rcp://[user@]machine/path
	vim scp://[user@]machine/path
<
If your ftp supports <.netrc>, then it too can be just as transparently used
if the needed triad of machine name, user id, and password are present in
that file.  Your ftp must be able to use the <.netrc> file on its own, however.
>
	vim ftp://[user@]machine[[:#]portnumber]/path
<
However, ftp will often need to query the user for the userid and password.
The latter will be done "silently"; ie. asterisks will show up instead of
the actually-typed-in password.  Netrw will retain the userid and password
for subsequent read/writes from the most recent transfer so subsequent
transfers (read/write) to or from that machine will take place without
additional prompting.

								*netrw-urls*
  +=================================+============================+============+
  |  Reading                        | Writing                    |  Uses      |
  +=================================+============================+============+
  | DAV:                            |                            |            |
  |  dav://host/path                |                            | cadaver    |
  |  :Nread dav://host/path         | :Nwrite dav://host/path    | cadaver    |
  +---------------------------------+----------------------------+------------+
  | FETCH:                          |                            |            |
  |  fetch://[user@]host/path       |                            |            |
  |  fetch://[user@]host:http/path  |  Not Available             | fetch      |
  |  :Nread fetch://[user@]host/path|                            |            |
  +---------------------------------+----------------------------+------------+
  | FILE:                           |                            |            |
  |  file:///*                      | file:///*                  |            |
  |  file://localhost/*             | file://localhost/*         |            |
  +---------------------------------+----------------------------+------------+
  | FTP:          (*3)              |              (*3)          |            |
  |  ftp://[user@]host/path         | ftp://[user@]host/path     | ftp  (*2)  |
  |  :Nread ftp://host/path         | :Nwrite ftp://host/path    | ftp+.netrc |
  |  :Nread host path               | :Nwrite host path          | ftp+.netrc |
  |  :Nread host uid pass path      | :Nwrite host uid pass path | ftp        |
  +---------------------------------+----------------------------+------------+
  | HTTP: wget is executable: (*4)  |                            |            |
  |  http://[user@]host/path        |        Not Available       | wget       |
  +---------------------------------+----------------------------+------------+
  | HTTP: fetch is executable (*4)  |                            |            |
  |  http://[user@]host/path        |        Not Available       | fetch      |
  +---------------------------------+----------------------------+------------+
  | RCP:                            |                            |            |
  |  rcp://[user@]host/path         | rcp://[user@]host/path     | rcp        |
  +---------------------------------+----------------------------+------------+
  | RSYNC:                          |                            |            |
  |  rsync://[user@]host/path       | rsync://[user@]host/path   | rsync      |
  |  :Nread rsync://host/path       | :Nwrite rsync://host/path  | rsync      |
  |  :Nread rcp://host/path         | :Nwrite rcp://host/path    | rcp        |
  +---------------------------------+----------------------------+------------+
  | SCP:                            |                            |            |
  |  scp://[user@]host/path         | scp://[user@]host/path     | scp        |
  |  :Nread scp://host/path         | :Nwrite scp://host/path    | scp  (*1)  |
  +---------------------------------+----------------------------+------------+
  | SFTP:                           |                            |            |
  |  sftp://[user@]host/path        | sftp://[user@]host/path    | sftp       |
  |  :Nread sftp://host/path        | :Nwrite sftp://host/path   | sftp  (*1) |
  +=================================+============================+============+

	(*1) For an absolute path use scp://machine//path.

	(*2) if <.netrc> is present, it is assumed that it will
	work with your ftp client.  Otherwise the script will
	prompt for user-id and password.

        (*3) for ftp, "machine" may be machine#port or machine:port
	if a different port is needed than the standard ftp port

	(*4) for http:..., if wget is available it will be used.  Otherwise,
	if fetch is available it will be used.

Both the :Nread and the :Nwrite ex-commands can accept multiple filenames.


NETRC							*netrw-netrc*

The typical syntax for lines in a <.netrc> file is given as shown below.
Ftp under Unix usually supports <.netrc>; ftp under Windows usually doesn't.
>
	machine {full machine name} login {user-id} password "{password}"
	default login {user-id} password "{password}"

Your ftp client must handle the use of <.netrc> on its own, but if the
<.netrc> file exists, an ftp transfer will not ask for the user-id or
password.

	Note:
	Since this file contains passwords, make very sure nobody else can
	read this file!  Most programs will refuse to use a .netrc that is
	readable for others.  Don't forget that the system administrator can
	still read the file!


PASSWORD						*netrw-passwd*

The script attempts to get passwords for ftp invisibly using |inputsecret()|,
a built-in Vim function.  See |netrw-uidpass| for how to change the password
after one has set it.

Unfortunately there doesn't appear to be a way for netrw to feed a password to
scp.  Thus every transfer via scp will require re-entry of the password.
However, |netrw-listhack| can help with this problem.


==============================================================================
5. Activation						*netrw-activate*

Network-oriented file transfers are available by default whenever Vim's
|'nocompatible'| mode is enabled.  The <netrw.vim> file resides in your
system's vim-plugin directory and is sourced automatically whenever you bring
up vim.  I suggest that, at a minimum, you have at least the following in your
<.vimrc> customization file: >

	set nocp
	if version >= 600
	  filetype plugin indent on
	endif
<

==============================================================================
6. Transparent File Transfer				*netrw-transparent*

Transparent file transfers occur whenever a regular file read or write
(invoked via an |:autocmd| for |BufReadCmd| or |BufWriteCmd| events) is made.
Thus one may use files across networks just as simply as if they were local. >

	vim ftp://[user@]machine/path
	...
	:wq

See |netrw-activate| for more on how to encourage your vim to use plugins
such as netrw.


==============================================================================
7. Ex Commands						*netrw-ex*

The usual read/write commands are supported.  There are also a few
additional commands available.  Often you won't need to use Nw or
Nread as shown in |netrw-transparent| (ie. simply use >
  :e url
  :r url
  :w url
instead, as appropriate) -- see |netrw-urls|.  In the explanations
below, a {netfile} is an url to a remote file.

:[range]Nw	Write the specified lines to the current
		file as specified in b:netrw_lastfile.

:[range]Nw {netfile} [{netfile}]...
		Write the specified lines to the {netfile}.

:Nread		Read the specified lines into the current
		buffer from the file specified in
		b:netrw_lastfile.

:Nread {netfile} {netfile}...
		Read the {netfile} after the current line.

:Nsource {netfile}
		Source the {netfile}.
		To start up vim using a remote .vimrc, one may use
		the following (all on one line) (tnx to Antoine Mechelynck) >
		vim -u NORC -N
		 --cmd "runtime plugin/netrwPlugin.vim"
		 --cmd "source scp://HOSTNAME/.vimrc"
<								*netrw-uidpass*
:call NetUserPass()
		If b:netrw_uid and b:netrw_passwd don't exist,
		this function query the user for them.

:call NetUserPass("userid")
		This call will set the b:netrw_uid and, if
		the password doesn't exist, will query the user for it.

:call NetUserPass("userid","passwd")
		This call will set both the b:netrw_uid and b:netrw_passwd.
		The user-id and password are used by ftp transfers.  One may
		effectively remove the user-id and password by using ""
		strings.

:NetrwSettings  This command is described in |netrw-settings| -- used to
                display netrw settings and change netrw behavior.


==============================================================================
8. Variables and Options			*netrw-options* *netrw-var*

The <netrw.vim> script provides several variables which act as options to
ffect <netrw.vim>'s behavior.  These variables typically may be set in the
user's <.vimrc> file:
(also see:
|netrw-settings| |netrw-browse-var| |netrw-protocol| |netrw-settings|) >

                        -------------
                        Netrw Options
                        -------------
	Option			Meaning
	--------------		-----------------------------------------------
<
        b:netrw_col             Holds current cursor position (during NetWrite)
        g:netrw_cygwin          =1 assume scp under windows is from cygwin
                                                              (default/windows)
                                =0 assume scp under windows accepts windows
                                   style paths                (default/else)
        g:netrw_ftp             =0 use default ftp            (uid password)
        g:netrw_ftpmode         ="binary"                     (default)
                                ="ascii"                      (your choice)
	g:netrw_ignorenetrc     =1                            (default)
	                           if you have a <.netrc> file but you don't
				   want it used, then set this variable.  Its
				   mere existence is enough to cause <.netrc>
				   to be ignored.
        b:netrw_lastfile        Holds latest method/machine/path.
        b:netrw_line            Holds current line number     (during NetWrite)
        g:netrw_passwd          Holds current password for ftp.
	g:netrw_silent          =0 transfers done normally
	                        =1 transfers done silently
        g:netrw_uid             Holds current user-id for ftp.
                                =1 use alternate ftp         (user uid password)
                                (see |netrw-options|)
        g:netrw_use_nt_rcp      =0 don't use WinNT/2K/XP's rcp (default)
                                =1 use WinNT/2K/XP's rcp, binary mode
        g:netrw_win95ftp        =0 use unix-style ftp even if win95/98/ME/etc
                                =1 use default method to do ftp >
	-----------------------------------------------------------------------
<
The script will also make use of the following variables internally, albeit
temporarily.
>
			     -------------------
			     Temporary Variables
			     -------------------
	Variable		Meaning
	--------		------------------------------------
<
	g:netrw_method		Index indicating rcp/ftp+.netrc/ftp
	g:netrw_machine		Holds machine name parsed from input
	g:netrw_fname		Holds filename being accessed >
	------------------------------------------------------------
<
								*netrw-protocol*

Netrw supports a number of protocols.  These protocols are invoked using the
variables listed below, and may be modified by the user.
>
			   ------------------------
                           Protocol Control Options
			   ------------------------
    Option            Type        Setting         Meaning
    ---------         --------    --------------  ---------------------------
<
    netrw_ftp         variable    =doesn't exist  userid set by "user userid"
                                  =0              userid set by "user userid"
                                  =1              userid set by "userid"
    NetReadFixup      function    =doesn't exist  no change
                                  =exists         Allows user to have files
                                                  read via ftp automatically
                                                  transformed however they wish
                                                  by NetReadFixup()
    g:netrw_dav_cmd    variable   ="cadaver"
    g:netrw_fetch_cmd  variable   ="fetch -o"     if fetch is available
    g:netrw_ftp_cmd    variable   ="ftp"
    g:netrw_http_cmd   variable   ="fetch -o"     if      fetch is available
    g:netrw_http_cmd   variable   ="wget -O"      else if wget  is available
    g:netrw_list_cmd   variable   ="ssh USEPORT HOSTNAME ls -Fa"
    g:netrw_rcp_cmd    variable   ="rcp"
    g:netrw_rsync_cmd  variable   ="rsync -a"
    g:netrw_scp_cmd    variable   ="scp -q"
    g:netrw_sftp_cmd   variable   ="sftp" >
    -------------------------------------------------------------------------
<
								*netrw-ftp*

The g:netrw_..._cmd options (|g:netrw_ftp_cmd| and |g:netrw_sftp_cmd|)
specify the external program to use handle the ftp protocol.  They may
include command line options (such as -p for passive mode).

Browsing is supported by using the |g:netrw_list_cmd|; the substring
"HOSTNAME" will be changed via substitution with whatever the current request
is for a hostname.

Two options (|g:netrw_ftp| and |netrw-fixup|) both help with certain ftp's
that give trouble .  In order to best understand how to use these options if
ftp is giving you troubles, a bit of discussion is provided on how netrw does
ftp reads.

For ftp, netrw typically builds up lines of one of the following formats in a
temporary file:
>
  IF g:netrw_ftp !exists or is not 1     IF g:netrw_ftp exists and is 1
  ----------------------------------     ------------------------------
<
       open machine [port]                    open machine [port]
       user userid password                   userid password
       [g:netrw_ftpmode]                      password
       [g:netrw_extracmd]                     [g:netrw_ftpmode]
       get filename tempfile                  [g:netrw_extracmd]
                                              get filename tempfile >
  ---------------------------------------------------------------------
<
The |g:netrw_ftpmode| and |g:netrw_extracmd| are optional.

Netrw then executes the lines above by use of a filter:
>
	:%! {g:netrw_ftp_cmd} -i [-n]
<
where
	g:netrw_ftp_cmd is usually "ftp",
	-i tells ftp not to be interactive
	-n means don't use netrc and is used for Method #3 (ftp w/o <.netrc>)

If <.netrc> exists it will be used to avoid having to query the user for
userid and password.  The transferred file is put into a temporary file.
The temporary file is then read into the main editing session window that
requested it and the temporary file deleted.

If your ftp doesn't accept the "user" command and immediately just demands a
userid, then try putting "let netrw_ftp=1" in your <.vimrc>.

								*netrw-cadaver*
To handle the SSL certificate dialog for untrusted servers, one may pull
down the certificate and place it into /usr/ssl/cert.pem.  This operation
renders the server treatment as "trusted".

						*netrw-fixup* *netreadfixup*
If your ftp for whatever reason generates unwanted lines (such as AUTH
messages) you may write a NetReadFixup(tmpfile) function:
>
    function! NetReadFixup(method,line1,line2)
      " a:line1: first new line in current file
      " a:line2: last  new line in current file
      if     a:method == 1 "rcp
      elseif a:method == 2 "ftp + <.netrc>
      elseif a:method == 3 "ftp + machine,uid,password,filename
      elseif a:method == 4 "scp
      elseif a:method == 5 "http/wget
      elseif a:method == 6 "dav/cadaver
      elseif a:method == 7 "rsync
      elseif a:method == 8 "fetch
      elseif a:method == 9 "sftp
      else               " complain
      endif
    endfunction
>
The NetReadFixup() function will be called if it exists and thus allows you to
customize your reading process.  As a further example, <netrw.vim> contains
just such a function to handle Windows 95 ftp.  For whatever reason, Windows
95's ftp dumps four blank lines at the end of a transfer, and so it is
desirable to automate their removal.  Here's some code taken from <netrw.vim>
itself:
>
    if has("win95") && g:netrw_win95ftp
     fun! NetReadFixup(method, line1, line2)
       if method == 3   " ftp (no <.netrc>)
        let fourblanklines= line2 - 3
        silent fourblanklines.",".line2."g/^\s*/d"
       endif
     endfunction
    endif
>

==============================================================================
9. Directory Browsing	*netrw-browse* *netrw-dir* *netrw-list* *netrw-help*

MAPS								*netrw-maps*
     <F1>.............Help.......................................|netrw-help|
     <cr>.............Browsing...................................|netrw-cr|
     <del>............Deleting Files or Directories..............|netrw-delete|
     -................Going Up...................................|netrw--|
     a................Hiding Files or Directories................|netrw-a|
     mb...............Bookmarking a Directory....................|netrw-mb|
     gb...............Changing to a Bookmarked Directory.........|netrw-gb|
     c................Make Browsing Directory The Current Dir....|netrw-c|
     d................Make A New Directory.......................|netrw-d|
     D................Deleting Files or Directories..............|netrw-D|
     <c-h>............Edit File/Directory Hiding List............|netrw-ctrl-h|
     i................Change Listing Style.......................|netrw-i|
     <c-l>............Refreshing the Listing.....................|netrw-ctrl-l|
     o................Browsing with a Horizontal Split...........|netrw-o|
     p................Preview Window.............................|netrw-p|
     q................Listing Bookmarks and History..............|netrw-q|
     r................Reversing Sorting Order....................|netrw-r|
     R................Renaming Files or Directories..............|netrw-R|
     s................Selecting Sorting Style....................|netrw-s|
     S................Editing the Sorting Sequence...............|netrw-S|
     t................Browsing with a new tab....................|netrw-t|
     u................Changing to a Predecessor Directory........|netrw-u|
     U................Changing to a Successor Directory..........|netrw-U|
     v................Browsing with a Vertical Split.............|netrw-v|
     x................Customizing Browsing.......................|netrw-x|

    COMMANDS						*netrw-explore-cmds*
     :Explore[!]  [dir] Explore directory of current file........|netrw-explore|
     :Sexplore[!] [dir] Split & Explore directory ...............|netrw-explore|
     :Hexplore[!] [dir] Horizontal Split & Explore...............|netrw-explore|
     :Vexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
     :Texplore[!] [dir] Tab & Explore............................|netrw-explore|
     :Pexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
     :Nexplore[!] [dir] Vertical Split & Explore.................|netrw-explore|
     :NetrwSettings.............................................|netrw-settings|

QUICK REFERENCE COMMANDS TABLE				*netrw-browse-cmds*
>
        -------	-----------
	Command	Explanation
        -------	-----------
<	<F1>	Causes Netrw to issue help
	 <cr>	Netrw will enter the directory or read the file |netrw-cr|
	 <del>	Netrw will attempt to remove the file/directory |netrw-del|
	   -	Makes Netrw go up one directory |netrw--|
	   a	Toggles between normal display, |netrw-a|
		 hiding (suppress display of files matching g:netrw_list_hide)
		 showing (display only files which match g:netrw_list_hide)
	   mb	bookmark current directory
	   gb	go to previous bookmarked directory
	   c	Make current browsing directory the current directory |netrw-c|
	   d	Make a directory |netrw-d|
	   D	Netrw will attempt to remove the file(s)/directory(ies) |netrw-D|
	 <c-h>	Edit file hiding list |netrw-ctrl-h|
	   i	Cycle between thin, long, wide, and tree listings|netrw-i|
	 <c-l>	Causes Netrw to refresh the directory listing |netrw-ctrl-l|
	   o	Enter the file/directory under the cursor in a new browser
		 window.  A horizontal split is used. |netrw-o|
	   O	Obtain a file specified by cursor |netrw-O|
	   p	Preview the file |netrw-p|
	   P	Browse in the previously used window |netrw-P|
	   q	List bookmarked directories and history |netrw-q|
	   r	Reverse sorting order |netrw-r|
	   R	Rename the designed file(s)/directory(ies) |netrw-R|
	   s	Select sorting style: by name, time, or file size |netrw-s|
	   S	Specify suffix priority for name-sorting |netrw-S|
	   t	Enter the file/directory under the cursor in a new tab|netrw-t|
	   u	Change to recently-visited directory |netrw-u|
	   U	Change to subsequently-visited directory |netrw-U|
	   v	Enter the file/directory under the cursor in a new browser
		 window.  A vertical split is used. |netrw-v|
	   x	Apply a function to a file. (special browsers) |netrw-x|

NETRW BROWSER VARIABLES					*netrw-browse-var*
>
   ---				-----------
   Var				Explanation
   ---				-----------
< *g:netrw_alto*		change from above splitting to below splitting
				by setting this variable (see |netrw-o|)
				 default: =&sb           (see |'sb'|)

  *g:netrw_altv*		change from left splitting to right splitting
				by setting this variable (see |netrw-v|)
				 default: =&spr          (see |'spr'|)

  *g:netrw_browse_split*	when browsing, <cr> will open the file by:
				=0: re-using the same window
				=1: horizontally splitting the window first  
				=2: vertically   splitting the window first  
				=3: open file in new tab

  *g:netrw_browsex_viewer*	specify user's preference for a viewer: >
					"kfmclient exec"
					"gnome-open"
<				If >
					"-"
<				is used, then netrwFileHandler() will look for
				a script/function to handle the given
				extension.  (see |netrw_filehandler|).

  *g:netrw_fastbrowse*		=0: slow speed browsing, never re-use
				    directory listings; always obtain
				    directory listings.
				=1: medium speed browsing, re-use directory
				    listings only when remote browsing.
				    (default value)
				=2: fast browsing, only obtains directory
				    listings when the directory hasn't been
				    seen before (or |netrw-ctrl-l| is used).
				Fast browsing retains old directory listing
				buffers so that they don't need to be
				re-acquired.  This feature is especially
				important for remote browsing.  However, if
				a file is introduced or deleted into or from
				such directories, the old directory buffer
				becomes out-of-date.  One may always refresh
				such a directory listing with |netrw-ctrl-l|.
				This option gives the choice of the trade-off
				between accuracy and speed to the user.

  *g:netrw_ftp_browse_reject*	ftp can produce a number of errors and warnings
				that can show up as "directories" and "files"
				in the listing.  This pattern is used to
				remove such embedded messages.  By default its
				value is:
				 '^total\s\+\d\+$\|
				 ^Trying\s\+\d\+.*$\|
				 ^KERBEROS_V\d rejected\|
				 ^Security extensions not\|
				 No such file\|
				 : connect to address [0-9a-fA-F:]*
				 : No route to host$'

  *g:netrw_ftp_list_cmd*	options for passing along to ftp for directory
				listing.  Defaults:
				 unix or g:netrw_cygwin set: : "ls -lF"
				 otherwise                     "dir"


  *g:netrw_ftp_sizelist_cmd*	options for passing along to ftp for directory
				listing, sorted by size of file.
				Defaults:
				 unix or g:netrw_cygwin set: : "ls -slF"
				 otherwise                     "dir"

  *g:netrw_ftp_timelist_cmd*	options for passing along to ftp for directory
				listing, sorted by time of last modification.
				Defaults:
				 unix or g:netrw_cygwin set: : "ls -tlF"
				 otherwise                     "dir"

  *g:netrw_hide*		if true, the hiding list is used
				 default: =0

  *g:netrw_keepdir*		=1 (default) keep current directory immune from
				   the browsing directory.
				=0 keep the current directory the same as the
				   browsing directory.
				The current browsing directory is contained in
				b:netrw_curdir (also see |netrw-c|)

  *g:netrw_list_cmd*		command for listing remote directories
				 default: (if ssh is executable)
				          "ssh HOSTNAME ls -FLa"

  *g:netrw_liststyle*		Set the default listing style:
                                = 0: thin listing (one file per line)
                                = 1: long listing (one file per line with time
				     stamp information and file size)
				= 2: wide listing (multiple files in columns)
				= 3: tree style listing
  *g:netrw_list_hide*		comma separated pattern list for hiding files
				 default: ""

  *g:netrw_local_mkdir*		command for making a local directory
				 default: "mkdir"

  *g:netrw_local_rmdir*		remove directory command (rmdir)
				 default: "rmdir"

  *g:netrw_maxfilenamelen*	=32 by default, selected so as to make long
				    listings fit on 80 column displays.
				If your screen is wider, and you have file
				or directory names longer than 32 bytes,
				you may set this option to keep listings
				columnar.

  *g:netrw_mkdir_cmd*		command for making a remote directory
				 default: "ssh USEPORT HOSTNAME mkdir"

  *g:netrw_rm_cmd*		command for removing files
				 default: "ssh USEPORT HOSTNAME rm"

  *g:netrw_rmdir_cmd*		command for removing directories
				 default: "ssh USEPORT HOSTNAME rmdir"

  *g:netrw_rmf_cmd*		 command for removing softlinks
				 default: "ssh USEPORT HOSTNAME rm -f"

  *g:netrw_sort_by*		sort by "name", "time", or "size"
				 default: "name"

  *g:netrw_sort_direction*	sorting direction: "normal" or "reverse"
				 default: "normal"

  *g:netrw_sort_sequence*	when sorting by name, first sort by the
				comma-separated pattern sequence
				 default: '[\/]$,*,\.bak$,\.o$,\.h$,
				           \.info$,\.swp$,\.obj$'

  *g:netrw_ssh_cmd*		One may specify an executable command
				to use instead of ssh for remote actions
				such as listing, file removal, etc.
				 default: ssh

  *g:netrw_ssh_browse_reject*	ssh can sometimes produce unwanted lines,
				messages, banners, and whatnot that one doesn't
				want masquerading as "directories" and "files".
				Use this pattern to remove such embedded
				messages.  By default its value is:
					 '^total\s\+\d\+$'

  *g:netrw_use_noswf*		netrw normally avoids writing swapfiles
  				for browser buffers.  However, under some
				systems this apparently is causing nasty
				ml_get errors to appear; if you're getting
				ml_get errors, try putting
				  let g:netrw_use_noswf= 0
				in your .vimrc.

  *g:netrw_timefmt*		specify format string to strftime() (%c)
				 default: "%c"

  *g:netrw_winsize*		specify initial size of new o/v windows
				 default: ""

  *g:NetrwTopLvlMenu*		This variable specifies the top level
				menu name; by default, its "Netrw.".  If
				you wish to change this, do so in your
				.vimrc.

INTRODUCTION TO DIRECTORY BROWSING			*netrw-browse-intro*

Netrw supports the browsing of directories on the local system and on remote
hosts, including listing files and directories, entering directories, editing
files therein, deleting files/directories, making new directories, and moving
(renaming) files and directories.  The Netrw browser generally implements the
previous explorer maps and commands for remote directories, although details
(such as pertinent global variable names) necessarily differ.

The Netrw remote file and directory browser handles two protocols: ssh and
ftp.  The protocol in the url, if it is ftp, will cause netrw to use ftp
in its remote browsing.  Any other protocol will be used for file transfers,
but otherwise the ssh protocol will be used to do remote directory browsing.

To use Netrw's remote directory browser, simply attempt to read a "file" with a
trailing slash and it will be interpreted as a request to list a directory:

	vim [protocol]://[user@]hostname/path/

For local directories, the trailing slash is not required.

If you'd like to avoid entering the password in for remote directory listings
with ssh or scp, see |netrw-listhack|.


NETRW BROWSING AND OPTION INCOMPATIBILITIES		*netrw-incompatible*

Netrw will not work properly with >

	:set acd
	:set fo=...ta...
<
If either of these options are present when browsing is attempted, netrw
will change them by using noacd and removing the ta suboptions from the
|'formatoptions'|.

			*netrw-explore*  *netrw-pexplore* *netrw-texplore*
			*netrw-hexplore* *netrw-sexplore* *netrw-nexplore*
			*netrw-vexplore*
DIRECTORY EXPLORING COMMANDS 

     :Explore[!]   [dir]... Explore directory of current file       *:Explore*
     :Sexplore[!]  [dir]... Split&Explore directory of current file *:Sexplore*
     :Hexplore[!]  [dir]... Horizontal Split & Explore              *:Hexplore*
     :Vexplore[!]  [dir]... Vertical   Split & Explore              *:Vexplore*
     :Texplore     [dir]... Tab              & Explore              *:Texplore*

     Used with :Explore **/pattern : (also see |netrw-starstar|)
     :Nexplore............. go to next matching file                *:Nexplore*
     :Pexplore............. go to previous matching file            *:Pexplore*

:Explore  will open the local-directory browser on the current file's
          directory (or on directory [dir] if specified).  The window will be
	  split only if the file has been modified, otherwise the browsing
	  window will take over that window.  Normally the splitting is taken
	  horizontally.
:Explore! is like :Explore, but will use vertical splitting.
:Sexplore will always split the window before invoking the local-directory
          browser.  As with Explore, the splitting is normally done
	  horizontally.
:Sexplore! [dir] is like :Sexplore, but the splitting will be done vertically.
:Hexplore  [dir] does an :Explore with |:belowright| horizontal splitting.
:Hexplore! [dir] does an :Explore with |:aboveleft|  horizontal splitting.
:Vexplore  [dir] does an :Explore with |:leftabove|  vertical splitting.
:Vexplore! [dir] does an :Explore with |:rightbelow| vertical splitting.
:Texplore  [dir] does a tabnew before generating the browser window

By default, these commands use the current file's directory.  However, one
may explicitly provide a directory (path) to use.

							*netrw-starstar*
When Explore, Sexplore, Hexplore, or Vexplore are used with a **/filepat,
such as:
>
	:Explore **/filename_pattern
<
netrw will attempt to find a file in the current directory or any subdirectory
which matches the filename pattern.  Internally, it produces a list of files
which match the pattern and their paths; to that extent it resembles the Unix
operation:
>
	find $(pwd) -name "$1" -exec "echo" "{}" ";" 2> /dev/null
<
The directory display is updated to show the subdirectory containing a
matching file.  One may then proceed to the next (or previous) matching files'
directories by using Nexplore or Pexplore, respectively.  If your console or
gui produces recognizable shift-up or shift-down sequences, then you'll likely
find using shift-downarrow and shift-uparrow convenient.  They're mapped by
netrw:

	<s-down>  == Nexplore, and
	<s-up>    == Pexplore.

As an example, consider
>
	:Explore **/*.c
	:Nexplore
	:Nexplore
	:Pexplore
<
The status line will show, on the right hand side of the status line, a
message like "Match 3 of 20".

							*netrw-starpat*
When Explore, Sexplore, Hexplore, or Vexplore are used with a */pattern,
such as:
>
	:Explore */pattern
<
netrw will use |:vimgrep| to find files which contain the given pattern.
Like what happens with |netrw-starstar|, a list of files which contain
matches to the given pattern is generated.  The cursor will then jump
to the first file with the given pattern; |:Nexplore|, |:Pexplore|, and
the shifted-down and -up arrows work with the list to move to the next
or previous files in that list.

						*netrw-starstarpat*
When Explore, Sexplore, Hexplore, or Vexplore are used with a **//pattern,
such as:
>
	:Explore **//pattern
<
then Explore will use |:vimgrep| to find files like |netrw-starpat|;
however, Explore will also search subdirectories as well as the current
directory.


REFRESHING THE LISTING				*netrw-ctrl-l* *netrw-ctrl_l*

To refresh either a local or remote directory listing, press ctrl-l (<c-l>) or
hit the <cr> when atop the ./ directory entry in the listing.  One may also
refresh a local directory by using ":e .".


GOING UP						*netrw--*

To go up a directory, press "-" or press the <cr> when atop the ../ directory
entry in the listing.

Netrw will use the command in |g:netrw_list_cmd| to perform the directory
listing operation after changing HOSTNAME to the host specified by the
user-provided url.  By default netrw provides the command as:

	ssh HOSTNAME ls -FLa

where the HOSTNAME becomes the [user@]hostname as requested by the attempt to
read.  Naturally, the user may override this command with whatever is
preferred.  The NetList function which implements remote directory browsing
expects that directories will be flagged by a trailing slash.


BROWSING							*netrw-cr*

Browsing is simple: move the cursor onto a file or directory of interest.
Hitting the <cr> (the return key) will select the file or directory.
Directories will themselves be listed, and files will be opened using the
protocol given in the original read request.  

  CAVEAT: There are four forms of listing (see |netrw-i|).  Netrw assumes
  that two or more spaces delimit filenames and directory names for the long
  and wide listing formats.  Thus, if your filename or directory name has two
  or more spaces embedded in it, or any trailing spaces, then you'll need to
  use the "thin" format to select it.

The |g:netrw_browse_split| option, which is zero by default, may be used to
cause the opening of files to be done in a new window or tab.  When the option
is one or two, the splitting will be taken horizontally or vertically,
respectively.  When the option is set to three, a <cr> will cause the file
to appear in a new tab.


OBTAINING A FILE						*netrw-O*

When browsing a remote directory, one may obtain a file under the cursor (ie.
get a copy on your local machine, but not edit it) by pressing the O key.
Only ftp and scp are supported for this operation (but since these two are
available for browsing, that shouldn't be a problem).  The status bar
will then show, on its right hand side, a message like "Obtaining filename".
The statusline will be restored after the transfer is complete.

Netrw can also "obtain" a file using the local browser.  Netrw's display
of a directory is not necessarily the same as Vim's "current directory",
unless |g:netrw_keepdir| is set to 0 in the user's <.vimrc>.  One may select
a file using the local browser (by putting the cursor on it) and pressing
"O" will then "obtain" the file; ie. copy it to Vim's current directory.

Related topics:
 * To see what the current directory is, use |:pwd|
 * To make the currently browsed directory the current directory, see |netrw-c|
 * To automatically make the currently browsed directory the current
   directory, see |g:netrw_keepdir|.


CHANGE LISTING STYLE						*netrw-i*

The "i" map cycles between the thin, long, wide, and tree listing formats.

The short listing format gives just the files' and directories' names.

The long listing is either based on the "ls" command via ssh for remote
directories or displays the filename, file size (in bytes), and the time and
date of last modification for local directories.  With the long listing
format, netrw is not able to recognize filenames which have trailing spaces.
Use the thin listing format for such files.

The wide listing format uses two or more contiguous spaces to delineate
filenames; when using that format, netrw won't be able to recognize or use
filenames which have two or more contiguous spaces embedded in the name or any
trailing spaces.  The thin listing format will, however, work with such files.
This listing format is the most compact.

The tree listing format has a top directory followed by files and directories
preceded by a "|".  One may open and close directories by pressing the <cr>
key while atop the directory name.  There is only one tree listing buffer;
hence, using "v" or "o" on a subdirectory will only show the same buffer,
twice.


MAKING A NEW DIRECTORY						*netrw-d*

With the "d" map one may make a new directory either remotely (which depends
on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
directory's name.  A bare <CR> at that point will abort the making of the
directory.  Attempts to make a local directory that already exists (as either
a file or a directory) will be detected, reported on, and ignored.


DELETING FILES OR DIRECTORIES		*netrw-delete* *netrw-D* *netrw-del*

Deleting/removing files and directories involves moving the cursor to the
file/directory to be deleted and pressing "D".  Directories must be empty
first before they can be successfully removed.  If the directory is a softlink
to a directory, then netrw will make two requests to remove the directory
before succeeding.  Netrw will ask for confirmation before doing the
removal(s).  You may select a range of lines with the "V" command (visual
selection), and then pressing "D".

The g:netrw_rm_cmd, g:netrw_rmf_cmd, and g:netrw_rmdir_cmd variables are used
to control the attempts to remove files and directories.  The g:netrw_rm_cmd
is used with files, and its default value is:

	g:netrw_rm_cmd: ssh HOSTNAME rm

The g:netrw_rmdir_cmd variable is used to support the removal of directories.
Its default value is:

	g:netrw_rmdir_cmd: ssh HOSTNAME rmdir

If removing a directory fails with g:netrw_rmdir_cmd, netrw then will attempt
to remove it again using the g:netrw_rmf_cmd variable.  Its default value is:

	g:netrw_rmf_cmd: ssh HOSTNAME rm -f


RENAMING FILES OR DIRECTORIES		*netrw-move* *netrw-rename* *netrw-R*

Renaming/moving files and directories involves moving the cursor to the
file/directory to be moved (renamed) and pressing "R".  You will then be
queried for where you want the file/directory to be moved.  You may select a
range of lines with the "V" command (visual selection), and then pressing "R".

The g:netrw_rename_cmd variable is used to implement renaming.  By default its
value is:

	ssh HOSTNAME mv

One may rename a block of files and directories by selecting them with
the V (|linewise-visual|).


HIDING FILES OR DIRECTORIES			*netrw-a* *netrw-hiding*

Netrw's browsing facility allows one to use the hiding list in one of three
ways: ignore it, hide files which match, and show only those files which
match.  The "a" map allows the user to cycle about these three ways.

The g:netrw_list_hide variable holds a comma delimited list of patterns (ex.
\.obj) which specify the hiding list. (also see |netrw-ctrl-h|)  To set the
hiding list, use the <c-h> map.  As an example, to hide files which begin with
a ".", one may use the <c-h> map to set the hiding list to '^\..*' (or one may
put let g:netrw_list_hide= '^\..*' in one's <.vimrc>).  One may then use the
"a" key to show all files, hide matching files, or to show only the matching
files.

	Example: ^.*\.[ch]
		This hiding list command will hide/show all *.c and *.h files.

	Example: ^.*\.c,^.*\.h
		This hiding list command will also hide/show all *.c and *.h
		files.

Don't forget to use the "a" map to select the normal/hiding/show mode you want!

						*netrw-ctrl_h*
EDIT FILE OR DIRECTORY HIDING LIST		*netrw-ctrl-h* *netrw-edithide*

The "<ctrl-h>" map brings up a requestor allowing the user to change the
file/directory hiding list.  The hiding list consists of one or more patterns
delimited by commas.  Files and/or directories satisfying these patterns will
either be hidden (ie. not shown) or be the only ones displayed (see
|netrw-a|).


BROWSING WITH A HORIZONTALLY SPLIT WINDOW		*netrw-o* *netrw-horiz*

Normally one enters a file or directory using the <cr>.  However, the "o" map
allows one to open a new window to hold the new directory listing or file.  A
horizontal split is used.  (for vertical splitting, see |netrw-v|)

Normally, the o key splits the window horizontally with the new window and
cursor at the top.  To change to splitting the window horizontally with the
new window and cursor at the bottom, have

	let g:netrw_alto = 1

in your <.vimrc>.  (also see |netrw-t| |netrw-v| |g:netrw_alto|)

There is only one tree listing buffer; using "o" on a displayed subdirectory 
will split the screen, but the same buffer will be shown twice.


BROWSING WITH A VERTICALLY SPLIT WINDOW				*netrw-v*

Normally one enters a file or directory using the <cr>.  However, the "v" map
allows one to open a new window to hold the new directory listing or file.  A
vertical split is used.  (for horizontal splitting, see |netrw-o|)

Normally, the v key splits the window vertically with the new window and
cursor at the left.  To change to splitting the window vertically with the new
window and cursor at the right, have

	let g:netrw_altv = 1

in your <.vimrc>.  (also see: |netrw-o| |netrw-t| |g:netrw_altv|)

There is only one tree listing buffer; using "v" on a displayed subdirectory 
will split the screen, but the same buffer will be shown twice.


BROWSING WITH A NEW TAB					*netrw-t*

Normally one enters a file or directory using the <cr>.  The "t" map
allows one to open a new window hold the new directory listing or file in a
new tab. (also see: |netrw-o| |netrw-v|)


PREVIEW WINDOW					*netrw-p* *netrw-preview*

One may use a preview window by using the "p" key when the cursor is atop the
desired filename to be previewed.


PREVIOUS WINDOW					*netrw-P* *netrw-prvwin*

To edit a file or directory in the previously used window (see :he |CTRL-W_P|),
press a "P".  If there's only one window, then the one window will be
horizontally split (above/below splitting is controlled by |g:netrw_alto|,
and its initial size is controlled by |g:netrw_winsize|).

If there's more than one window, the previous window will be re-used on
the selected file/directory.  If the previous window's associated buffer
has been modified, and there's only one window with that buffer, then
the user will be asked if s/he wishes to save the buffer first (yes,
no, or cancel).


SELECTING SORTING STYLE				*netrw-s* *netrw-sort*

One may select the sorting style by name, time, or (file) size.  The "s" map
allows one to circulate amongst the three choices; the directory listing will
automatically be refreshed to reflect the selected style.


EDITING THE SORTING SEQUENCE		*netrw-S* *netrw-sortsequence*

When "Sorted by" is name, one may specify priority via the sorting sequence
(g:netrw_sort_sequence).  The sorting sequence typically prioritizes the
name-listing by suffix, although any pattern will do.  Patterns are delimited
by commas.  The default sorting sequence is:
>
	[\/]$,*,\.bak$,\.o$,\.h$,\.info$,\.swp$,\.obj$
<
The lone * is where all filenames not covered by one of the other patterns
will end up.  One may change the sorting sequence by modifying the
g:netrw_sort_sequence variable (either manually or in your <.vimrc>) or by
using the "S" map.


REVERSING SORTING ORDER			*netrw-r* *netrw-reverse*

One may toggle between normal and reverse sorting order by pressing the
"r" key.


CHANGING TO A PREDECESSOR DIRECTORY		*netrw-u* *netrw-updir*

Every time you change to a new directory (new for the current session),
netrw will save the directory in a recently-visited directory history
list (unless g:netrw_dirhistmax is zero; by default, its ten).  With the
"u" map, one can change to an earlier directory (predecessor).  To do
the opposite, see |netrw-U|.


CHANGING TO A SUCCESSOR DIRECTORY		*netrw-U* *netrw-downdir*

With the "U" map, one can change to a later directory (successor).
This map is the opposite of the "u" map. (see |netrw-u|)  Use the
q map to list both the bookmarks and history. (see |netrw-q|)

						*netrw-gx*
CUSTOMIZING BROWSING WITH A USER FUNCTION	*netrw-x* *netrw-handler*
						(also see |netrw_filehandler|)

Certain files, such as html, gif, jpeg, (word/office) doc, etc, files, are
best seen with a special handler (ie. a tool provided with your computer).
Netrw allows one to invoke such special handlers by: >

	* when Exploring, hit the "x" key
	* when editing, hit gx with the cursor atop the special filename
<	  (not available if the |g:netrw_nogx| variable exists)

Netrw determines which special handler by the following method:

  * if |g:netrw_browsex_viewer| exists, then it will be used to attempt to
    view files.  Examples of useful settings (place into your <.vimrc>): >

	:let g:netrw_browsex_viewer= "kfmclient exec"
<   or >
	:let g:netrw_browsex_viewer= "gnome-open"
<
    If g:netrw_browsex_viewer == '-', then netrwFileHandler() will be
    invoked first (see |netrw_filehandler|).

  * for Windows 32 or 64, the url and FileProtocolHandler dlls are used.  
  * for Gnome (with gnome-open): gnome-open is used.
  * for KDE (with kfmclient): kfmclient is used.
  * otherwise the netrwFileHandler plugin is used.

The file's suffix is used by these various approaches to determine an
appropriate application to use to "handle" these files.  Such things as
OpenOffice (*.sfx), visualization (*.jpg, *.gif, etc), and PostScript (*.ps,
*.eps) can be handled.

							*netrw_filehandler*

The "x" map applies a function to a file, based on its extension.  Of course,
the handler function must exist for it to be called!
>
 Ex. mypgm.html   x ->
                  NFH_html("scp://user@host/some/path/mypgm.html")
<
Users may write their own netrw File Handler functions to support more
suffixes with special handling.  See <plugin/netrwFileHandlers.vim> for
examples on how to make file handler functions.   As an example: >

	" NFH_suffix(filename)
	fun! NFH_suffix(filename)
	..do something special with filename..
	endfun
<
These functions need to be defined in some file in your .vim/plugin
(vimfiles\plugin) directory.  Vim's function names may not have punctuation
characters (except for the underscore) in them.  To support suffices that
contain such characters, netrw will first convert the suffix using the
following table: >

    @ -> AT       ! -> EXCLAMATION    % -> PERCENT  
    : -> COLON    = -> EQUAL          ? -> QUESTION 
    , -> COMMA    - -> MINUS          ; -> SEMICOLON
    $ -> DOLLAR   + -> PLUS           ~ -> TILDE    
<    
So, for example: >

	file.rcs,v  ->  NFH_rcsCOMMAv()
<
If more such translations are necessary, please send me email: >
		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
with a request.


MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* *netrw-curdir*

By default, |g:netrw_keepdir| is 1.  This setting means that the current
directory will not track the browsing directory.

Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
track netrw's browsing directory.

However, given the default setting for g:netrw_keepdir of 1 where netrw
maintains its own separate notion of the current directory, in order to make
the two directories the same, use the "c" map (just type c).  That map will
set Vim's notion of the current directory to netrw's current browsing
directory.


BOOKMARKING A DIRECTORY		*netrw-mb* *netrw-bookmark* *netrw-bookmarks*
One may easily "bookmark" a directory by using >

	{cnt}mb
<
Any count may be used.  One may use viminfo's "!" option to retain bookmarks
between vim sessions.  See |netrw-gb| for how to return to a bookmark and
|netrw-q| for how to list them.


CHANGING TO A BOOKMARKED DIRECTORY			*netrw-gb* 

To change directory back to a bookmarked directory, use

	{cnt}gb

Any count may be used to reference any of the bookmarks.  See |netrw-mb| on
how to bookmark a directory and |netrw-q| on how to list bookmarks.


LISTING BOOKMARKS AND HISTORY			*netrw-q* *netrw-listbookmark*

Pressing "q" will list the bookmarked directories and directory traversal
history (query). (see |netrw-mb|, |netrw-gb|, |netrw-u|, and |netrw-U|)


IMPROVING DIRECTORY BROWSING				*netrw-listhack*

Especially with the remote directory browser, constantly entering the password
is tedious.

For Linux/Unix systems, the book "Linux Server Hacks - 100 industrial strength
tips & tools" by Rob Flickenger (O'Reilly, ISBN 0-596-00461-3) gives a tip
for setting up no-password ssh and scp and discusses associated security
issues.  It used to be available at http://hacks.oreilly.com/pub/h/66 ,
but apparently that address is now being redirected to some "hackzine".
I'll attempt a summary:

	1. Generate a public/private key pair on the ssh server:
	   ssh-keygen -t rsa
	   (saving the file in ~/.ssh/id_rsa is ok)
	2. Just hit the <CR> when asked for passphrase (twice).
	3. This creates two files:
	     ~/.ssh/id_rsa
	     ~/.ssh/id_rsa.pub
	4. On the client:
	    cd
	    mkdir .ssh
	    chmod 0700 .ssh
	    scp {serverhostname}:.ssh/id_rsa.pub .
	    cat id_rsa.pub >> .ssh/authorized_keys2

For Windows, folks on the vim mailing list have mentioned that Pageant helps
with avoiding the constant need to enter the password.


NETRW SETTINGS						*netrw-settings*

With the NetrwSettings.vim plugin, >
	:NetrwSettings
will bring up a window with the many variables that netrw uses for its
settings.  You may change any of their values; when you save the file, the
settings therein will be used.  One may also press "?" on any of the lines for
help on what each of the variables do.

(also see: |netrw-browse-var| |netrw-protocol| |netrw-var| |netrw-variables|)


==============================================================================
10. Problems and Fixes						*netrw-problems*

	(This section is likely to grow as I get feedback)
	(also see |netrw-debug|)
								*netrw-p1*
	P1. I use windows 95, and my ftp dumps four blank lines at the
	    end of every read.

		See |netrw-fixup|, and put the following into your
		<.vimrc> file:

			let g:netrw_win95ftp= 1

								*netrw-p2*
	P2. I use Windows, and my network browsing with ftp doesn't sort by
	    time or size!  -or-  The remote system is a Windows server; why
	    don't I get sorts by time or size?

		Windows' ftp has a minimal support for ls (ie. it doesn't
		accept sorting options).  It doesn't support the -F which
		gives an explanatory character (ABC/ for "ABC is a directory").
		Netrw then uses "dir" to get both its short and long listings.
		If you think your ftp does support a full-up ls, put the
		following into your <.vimrc>: >

			let g:netrw_ftp_list_cmd    = "ls -lF"
			let g:netrw_ftp_timelist_cmd= "ls -tlF"
			let g:netrw_ftp_sizelist_cmd= "ls -slF"
<
		Alternatively, if you have cygwin on your Windows box, put
		into your <.vimrc>: >

			let g:netrw_cygwin= 1
<
		This problem also occurs when the remote system is Windows.
		In this situation, the various g:netrw_ftp_[time|size]list_cmds
		are as shown above, but the remote system will not correctly
		modify its listing behavior.


								*netrw-p3*
	P3. I tried rcp://user@host/ (or protocol other than ftp) and netrw
	    used ssh!  That wasn't what I asked for...

		Netrw has two methods for browsing remote directories: ssh
		and ftp.  Unless you specify ftp specifically, ssh is used.
		When it comes time to do download a file (not just a directory
		listing), netrw will use the given protocol to do so.

								*netrw-p4*
	P4. I would like long listings to be the default.

			let g:netrw_liststyle= 1

		Check out |netrw-browse-var| for more customizations that
		you can set.

								*netrw-p5*
	P5. My times come up oddly in local browsing

		Does your system's strftime() accept the "%c" to yield dates
		such as "Sun Apr 27 11:49:23 1997"?  If not, do a "man strftime"
		and find out what option should be used.  Then put it into
		your <.vimrc>:
			let g:netrw_timefmt= "%X"  (where X is the option)

								*netrw-p6*
	P6. I want my current directory to track my browsing.
	    How do I do that?

		let g:netrw_keepdir= 0
	
								*netrw-p7*
	P7. I use Chinese (or other non-ascii) characters in my filenames, and
	    netrw (Explore, Sexplore, Hexplore, etc) doesn't display them!

		(taken from an answer provided by Wu Yongwei on the vim
		mailing list)
		I now see the problem. You code page is not 936, right? Vim
		seems only able to open files with names that are valid in the
		current code page, as are many other applications that do not
		use the Unicode version of Windows APIs. This is an OS-related
		issue. You should not have such problems when the system
		locale uses UTF-8, such as modern Linux distros.

		(...it is one more reason to recommend that people use utf-8!)

								*netrw-p8*
	P8. I'm getting "ssh is not executable on your system" -- what do I
	    do?

		(Dudley Fox) Most people I know use putty for windows ssh.  It
		is a free ssh/telnet application. You can read more about it
		here:

		http://www.chiark.greenend.org.uk/~sgtatham/putty/ Also:

		(Marlin Unruh) This program also works for me. It's a single
		executable, so he/she can copy it into the Windows\System32
		folder and create a shortcut to it. 

		(Dudley Fox) You might also wish to consider plink, as it
		sounds most similar to what you are looking for. plink is an
		application in the putty suite.

           http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html#plink

	   	(Vissale Neang) Maybe you can try OpenSSH for windows, which
		can be obtained from:

		http://sshwindows.sourceforge.net/

		It doesn't need the full Cygwin package. 

		(Antoine Mechelynck) For individual Unix-like programs needed
		for work in a native-Windows environment, I recommend getting
		them from the GnuWin32 project on sourceforge if it has them:

		    http://gnuwin32.sourceforge.net/

		Unlike Cygwin, which sets up a Unix-like virtual machine on
		top of Windows, GnuWin32 is a rewrite of Unix utilities with
		Windows system calls, and its programs works quite well in the
		cmd.exe "Dos box". 

		(dave) Download WinSCP and use that to connect to the server.
		In Preferences > Editors, set gvim as your editor:

			- Click "Add..."
			- Set External Editor (adjust path as needed, include
			  the quotes and !.! at the end):
			    "c:\Program Files\Vim\vim70\gvim.exe" !.!
			- Check that the filetype in the box below is
			  {asterisk}.{asterisk} (all files), or whatever types
			  you want (cec: change {asterisk} to * ; I had to
			  write it that way because otherwise the helptags
			  system thinks its a tag)
			- Make sure its at the top of the listbox (click it,
			  then click "Up" if its not)
		If using the Norton Commander style, you just have to hit <F4>
		to edit a file in a local copy of gvim.

		(Vit Gottwald) How to generate public/private key and save
		public key it on server: >
  http://www.tartarus.org/~simon/puttydoc/Chapter8.html#pubkey-gettingready
			8.3 Getting ready for public key authentication
<
		How to use private key with 'pscp': >
			http://www.tartarus.org/~simon/puttydoc/Chapter5.html
			5.2.4 Using public key authentication with PSCP 
<
		(cec) To make proper use of these suggestions above, you will
		need to modify the following user-settable variables in your
		.vimrc:

			|g:netrw_ssh_cmd| |g:netrw_list_cmd|  |g:netrw_mkdir_cmd|
			|g:netrw_rm_cmd|  |g:netrw_rmdir_cmd| |g:netrw_rmf_cmd|

		The first one (|g:netrw_ssh_cmd|) is the most important; most
		of the others will use the string in g:netrw_ssh_cmd by
		default.
						*netrw-p9* *netrw-ml_get*
	P9. I'm browsing, changing directory, and bang!  ml_get errors
	    appear and I have to kill vim.  Any way around this?

		Normally netrw attempts to avoid writing swapfiles for
		its temporary directory buffers.  However, on some systems
		this attempt appears to be causing ml_get errors to
		appear.  Please try setting |g:netrw_use_noswf| to 0
		in your <.vimrc>: >
			let g:netrw_use_noswf= 0
<

==============================================================================
11. Debugging						*netrw-debug*

The <netrw.vim> script is typically available as:
>
	/usr/local/share/vim/vim6x/plugin/netrw.vim
< -or- >
	/usr/local/share/vim/vim7x/plugin/netrw.vim
<
which is loaded automatically at startup (assuming :set nocp).

	1. Get the <Decho.vim> script, available as:

	     http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_scripts
	     as "Decho, a vimL debugging aid"
	   or
	     http://vim.sourceforge.net/scripts/script.php?script_id=120

	   and put it into your local plugin directory.

	2. <Decho.vim> itself needs the <cecutil.vim> script, so you'll need
	   to put it into your .vim/plugin, too.  You may obtain it from:

		http://mysite.verizon.net/astronaut/vim/index.html#VimFuncs
		as "DrC's Utilities"

	3. Edit the <netrw.vim> file by typing:

		vim netrw.vim
		:DechoOn
		:wq

	   To restore to normal non-debugging behavior, edit <netrw.vim>
	   by typing

		vim netrw.vim
		:DechoOff
		:wq

	   This command, provided by <Decho.vim>, will comment out all
	   Decho-debugging statements (Dfunc(), Dret(), Decho(), Dredir()).

	4. Then bring up vim and attempt a transfer or do browsing.  A set of
	   messages should appear concerning the steps that <netrw.vim> took
	   in attempting to read/write your file over the network.

	   To save the file, use >
		:wincmd j
		:set bt=
		:w! DBG
<	   Please send that information to <netrw.vim>'s maintainer, >
		NdrOchip at ScampbellPfamily.AbizM - NOSPAM
<
==============================================================================
12. History						*netrw-history* {{{1

	v109: Mar 26, 2007 * if a directory name includes a "$" character,
			     Explore() will use expand() in an attempt to
			     decipher the name.
	      May 07, 2007 * g:netrw_use_errorwindow now allows one to
	                     have error messages go to a reliable window
			     or to use a less reliable but recallable 
			     echoerr method
	      May 07, 2007 * g:netrw_scpport and g:netrw_sshport support
	                     use of -P and -p, respectively, to set port
			     for scp/ssh.
	v108: Jan 03, 2007 * included preview map (|netrw-p|), supporting
			     remote browsing
			   * netrw can now source remote files
	      Jan 26, 2007 * Colton Jamieson noted that remote directory
			     browsing did not support alternate port
			     selection.  This feature has now been extended
			     to apply to all remote browsing commands via ssh.
			     (list, remove/delete, rename)
	      Jan 31, 2007 * Luis Florit reported that @* was an invalid
			     register.  The @* register is now only saved and
			     restored if |'guioptions'| contains "a".
	      Feb 02, 2007 * Fixed a bug that cropped up when writing files
			     via scp using cygwin
	      Feb 08, 2007 * tree listing mode managed to stop working again;
			     fixed again!
	      Feb 15, 2007 * Guido Van Hoecke reported that netrw didn't
			     handle browsing well with M$ ftp servers.  He even
			     set up a temporary account for me to test with
			     (thanks!).  Netrw now can browse M$ ftp servers.
	v107: Oct 12, 2006 * bypassed the autowrite option
	      Oct 24, 2006 * handles automatic decompression of *.gz and *.bz2
			     files
	      Nov 03, 2006 * Explore will highlight matching files when
			     **/pattern is used (and if the |'hls'| option
			     is set)
	      Nov 09, 2006 * a debugging line, when enabled, was inadvertently
			     bringing up help instead of simply reporting on
			     list contents
	      Nov 21, 2006 * tree listing improved (cursor remains put)
	      Nov 27, 2006 * fixed b:netrw_curdir bug when repeated "i"s were
			     pressed.
	      Dec 15, 2006 * considerable qty of changes, mostly to share more
			     code between local and remote browsing.  Includes
			     support for tree-style listing for both remote
			     and local browsing.
	      Dec 15, 2006 * Included Peter Bengtsson's modifications to
			     support the Amiga.
	v106: Sep 21, 2006 * removed old v:version<700 code as netrw now
			     requires vim 7.0
			   * worked around a bug where register * was
			     overwritten during local browsing
	v104: Sep 05, 2006 * as suggested by Rodolfo Borges, :Explore and
			     variants will position the cursor on the file
			     just having been edited
			   * changed default |g:netrw_sort_sequence| order
			   * changed b, Nb to simply mb  (see |netrw-mb|)
			   * changed B, NB to simply gb  (see |netrw-gb|)
			   * tree listing style (see |g:netrw_liststyle|)
			   * attempts to retain the alternate file
	v103: Jul 26, 2006 * used Yakov Lerner's tip#1289 to improve netrw
			     error message display
			   * wide listings didn't handle files with backslashes
			     in their names properly.  A symptom was an
			     inability to open files.
	      Aug 09, 2006 * included "t" mapping for opening tabbed windows,
			    both for remote and local browsing
			   * changed netrw_longlist to netrw_liststyle
	      Aug 15, 2006 * fixed one of the NB maps
	      Aug 22, 2006 * changed *Explore commands to use -nargs=* instead
			     of -nargs=?.  Allows both -complete=dir _and_ the
			     starstar arguments to work (-nargs=? seems to
			     require one or the other).
	      Aug 23, 2006 * copied all w:.. variables across splits to
			     new windows
	      Aug 25, 2006 * when g:netrw_browsex_viewer was '-'
			     (see |g:netrw_browsex_viewer|) it wasn't causing
			     netrwFileHandlers#Invoke() to be called as it
			     was expected to.  (tnx Steve Dugaro)
	      Aug 29, 2006 * changed NetBrowseX() to use "setlocal ... noswf"
			     instead of "set ... noswf"  (tnx Benji Fisher)
	      Aug 31, 2006 * tabs and fastbrowse<=1 didn't work together.
	v102: Jun 15, 2006 * chgd netrwPlugin to call netrw#LocalBrowseCheck()
			   * bugfix: g:netrw_keepdir==0 had stopped working
	      Jul 06, 2006 * bugfix: NetOptionSave/Restore now saves/restores
			     the unnamed register (|registers|)
	      Jul 07, 2006 * |g:netrw_menu| support included
	      Jul 13, 2006 * :Texplore command implemented
	      Jul 17, 2006 * NetSplit and (Local|Net)BrowseChgDir() were both
			     splitting windows.  This affected o, v, and
			     g:netrw_browse_split.
	      Jul 20, 2006 * works around wildignore setting (was causing
			     netrw's local browser not to list wildignore'd
			     files)
	      Jul 24, 2006 * <leftmouse> acts as a <cr> for selecting a file
			     <rightmouse> acts as a <del> for deleting a file
	v100: May 14, 2006 * when using Windows and shell==cmd.exe, the
			     default for g:netrw_ignorenetrc is now 1
			   * bugfix: unwanted ^Ms now removed
			     (affected shell==cmd.exe - Windows)
			   * added Bookmarks and History to the menu
			   * an error message about non-existing
			     w:netrw_longlist was appearing during attempts to
			     Explore (fixed)
			   * g:netrw_shq now available to make netrw use
			     specified style of quotes for commands
	     May 29, 2006  * user NFH_*() functions were inadvertently being
			     ignored
			   * fixed a Windows non-cygwin ftp handling problem.
			   * hiding pattern candidate separators included some
			     characters it shouldn't have (tnx to Osei Poku)
	     Jun 01, 2006  * for browsing, netrw was supposed to use "dir"
			     instead of "ls -lF" when using
			     ftp+non-cygwin+windows.  Fixed.
			   * an inadvertently left-in-place debugging statement
			     was preventing use of the "x" key with browsing.
	     Jun 05, 2006  * g:netrw_nogx available to prevent making the gx
			     map (see |g:netrw_nogx|)
			   * bugfix, Explore wouldn't change directory
			     properly (vim ., :Explore subdirname)
	     Jun 06, 2006  * moved history to 2nd line in Netrw menu
			   * fixed delete for unix-based systems
	     Jun 07, 2006  * x key now works for windows-noncygwin-ftp
	     Jun 08, 2006  * Explore */pat and **//pat now wraps
	v99: May 09, 2006  * g:netrw_browse_split=3 for opening files in new
			     tabs implemented.
	     May 12, 2006  * deletes temporary file at end of NetRead()
			   * visual mode based Obtain implemented
			   * added -complete=dir to the various Explore
			     commands
	v98: May 02, 2006  * the "p" key didn't work properly when the browsing
			     directory name had spaces in it.
	v97: May 01, 2006  * exists("&acd") now used to determine if
			     the 'acd' option exists
			   * "obtain" now works again under Windows
	v96: * bugfix - the |'acd'| option is not always defined but is
	       now bypassed only when it is
	v95: * bugfix - Hiding mode worked correctly (don't show any file
	       matching any of the g:netrw_hide patterns), but
	       showing mode was showing only those files that didn't
	       match any of the g:netrw_hide patterns.  Instead, it now
	       shows all files that match any of the g:netrw_hide patterns
	       (the difference between a logical and and logical or).
	v94: * bugfix - a Decho() had a missing quote; only affects things
	       when debugging was enabled.
	v93: * bugfix - removed FocusGained event from causing a slow-browser
	       refresh for Windows
	v92: * :Explore **//pattern implemented  (**/filepattern already taken)
	v91: * :Explore */pattern implemented
	     * |'acd'| option bypassed
	v90: * mark ', as suggested by Yegappan Lakshmanan, used to help
	       guarantee entry into the jump list when appropriate.
	     * <s-down> and <s-up> are no longer defined until a
	       :Explore **/pattern  is used (if the user already has a map
	       for them).  They will be defined for new browser windows
	       from that point forward.
	v89: * A <s-down>, <s-up>, :Nexplore, or a :Pexplore without having
	       first done an :Explore **/pattern (see |netrw-starstar|) caused
	       a lot of unhelpful error messages to appear
	v88: * moved DrChip.Netrw menu to Netrw.  Now has priority 80 by
	       default.  g:NetrwTopLvlMenu == "Netrw" and can be changed
	       by the user to suit.  The priority is g:NetrwMenuPriority.
	     * Changed filetype for browser displays from netrwlist to netrw.
	v87: * bug fix -- menus were partially disappearing
	v85: * bug fix -- missing an endif
	     * bug fix -- handles spaces in names and directories when using
	       ftp-based browsing
	v83: * disabled stop-acd handling; the change in directory handling
	       may allow acd to be used again.  Awaiting feedback.
	     * D was refusing to delete remote files/directories in wide
	       listing mode.
	v81: * FocusGained also used to refresh/wipe local browser directory
	       buffers
	     * (bugfix) netrw was leaving [Scratch] buffers behind when the
	       user had the "hidden" option set.  The 'hidden' option is
	       now bypassed.
	v80: * ShellCmdPost event used in conjunction with g:netrw_fastbrowse
	       to refresh/wipe local browser directory buffers.
	v79: * directories are now displayed with nowrap
	     * (bugfix) if the column width was smaller than the largest
	       file's name, then netrw would hang when using wide-listing
	       mode - fixed
	     * g:netrw_fastbrowse introduced
	v78: * progress has been made on allowing spaces inside directory
	       names for remote work (reading, writing, browsing).  (scp)
	v77: * Mikolaj Machowski fixed a bug in a substitute command
	     * g:netrw_browsex_viewer implemented
	     * Mikolaj Machowski pointed out that gnome-open is often
	       executable under KDE systems, although it is effectively
	       not functional.  NetBrowseX now looks for "kicker" as 
	       a running process to determine if KDE is actually the
	       really running.
	     * Explorer's O functionality was inadvertently left out.
	       Netrw now does the same thing, but with the "P" key.
	     * added g:netrw_browse_split option
	     * fixed a bug where the directory contained a "." but
	       the file didn't (was treating the dirname from "."
	       onwards as a suffix)
	v76: * "directory is missing" error message now restores echo
	       highlighting
	v75: * file://... now conforms to RFC2396 (thanks to S. Zacchiroli)
	     * if the binary option is set, then NetWrite() will only write
	       the whole file (line numbers don't make sense with this).
	       Supports writing of tar and zip files.
	v74: * bugfix (vim, then :Explore) now works
	     * ctrl-L keeps cursor at same screen location (both local and
	       remote browsing)
	     * netrw now can read remote zip and tar files
	     * Obtain now uses WinXP ftp+.netrc successfully
	v73: * bugfix -- scp://host/path/file was getting named incorrectly
	     * netrw detects use of earlier-than-7.0 version of vim and issues
	       a pertinent error message.
	     * netrwSettings.vim is now uses autoloading.  Only
	       <netrwPlugin.vim> is needed as a pure plugin
	       (ie. always loaded).
	v72: * bugfix -- formerly, one could prevent the loading of netrw
	       by "let g:loaded_netrw=1"; when autoloading became supported,
	       this feature was lost.  It is now restored.
	v71: * bugfix -- made some "set nomodifiable"s into setlocal variants
	       (allows :e somenewfile  to be modifiable as usual)
	     * NetrwSettings calls a netrw function, thereby assuring that
	       netrw has loaded.  However, if netrw does not load for whatever
	       reason, then NetrwSettings will now issue a warning message.
	     * For what reason I don't recall, when wget and fetch are both
	       not present, and an attempt to read a http://... url is made,
	       netrw exited.  It now only returns.
	     * When ch=1, on the second and subsequent uses of browsing Netrw
	       would issue a blank line to clear the echo'd messages.  This
	       caused an annoying "Hit-Enter" prompt; now a blank line message
	       is echo'd only if &ch>1.
	v70: * when using |netrw-O|, the "Obtaining filename" message is now
	       shown using |hl-User9|.  If User9 has not been defined, netrw
	       will define it.
	v69: * Bugfix: win95/98 machines were experiencing a
	       "E121: Undefined variable: g:netrw_win95ftp" message
	v68: * double-click-leftmouse selects word under mouse
	v67: * Passwords which contain blanks will now be surrounded by
	       double-quotes automatically (Yongwei)
	v66: * Netrw now seems to work with a few more Windows situations
	     * O now obtains a file: remote browsing file -> local copy,
	       locally browsing file -> current directory (see :pwd)
	     * i now cycles between thin, long, and wide listing styles
	     * NB and Nb are maps that are always available; corresponding
	       B and b maps are only available when not using wide listing
	       in order to allow them to be used for motions
	v65: * Browser functions now use NetOptionSave/Restore; in particular,
	       netrw now works around the report setting
	v64: * Bugfix - browsing a "/" directory (Unix) yielded buffers 
	       named "[Scratch]" instead of "/"
	     * Bugfix - remote browsing with ftp was omitting the ./ and ../
	v63: * netrw now takes advantage of autoload (and requires 7.0)
	     * Bugfix - using r (to reverse sort) working again
	v62: * Bugfix - spaces allowed again in directory names with
	       g:netrw_keepdir=0.  In fact, I've tested netrw (again)
	       with most ANSI punctuation marks for directory names.
	     * Bugfix - NetrwSettings gave errors when g:netrw_silent
	       had not be set.
	v61: * document upgrade -- netrw variable-based settings all should
	       have tags.  Supports NetrwSettings command.
	     * several important variables are window-oriented.  Netrw has
	       to transfer these across a window split.  See s:BufWinVars()
	       and s:UseBufWinVars().
	v60: * when using the i map to switch between long and short listings,
	       netrw will now keep cursor on same line
	     * "Match # of #" now uses status line
	     * :Explore **/*.c  will now work from a non-netrw-browser window
	     * :Explore **/patterns can now be run in separate browser windows
	     * active banner (hit <cr> will cause various things to happen)
	v59: * bugfix -- another keepalt work-around installed (for vim6.3)
	     * "Match # of #" for Explore **/pattern matches
	v58: * Explore and relatives can now handle **/somefilepattern (v7)
	     * Nexplore and Pexplore introduced (v7).  shift-down and shift-up
	       cursor keys will invoke Nexplore and Pexplore, respectively.
	     * bug fixed with o and v
	     * autochdir only worked around for vim when it has been
	       compiled with either |+netbeans_intg| or |+sun_workshop|
	     * Under Windows, all directories and files were being preceded
	       with a "/" when local browsing.  Fixed.
	     * When: syntax highlighting is off, laststatus=2, and remote
	       browsing is used, sometimes the laststatus highlighting
	       bleeds into the entire display.  Work around - do an extra
	       redraw in that case.
	     * Bugfix: when g:netrw_keepdir=0, due to re-use of buffers,
	       netrw didn't change the directory when it should've
	     * Bugfix: D and R commands work again
	v57: * Explore and relatives can now handle RO files
	     * reverse sort restored with vim7's sort command
	     * g:netrw_keepdir now being used to keep the current directory
	       unchanged as intended (sense change)
	     * vim 6.3 still supported
	v56: * LocalBrowse now saves autochdir setting, unsets it, and
	       restores it before returning.
	     * using vim's rename() instead of system + local_rename variable
	     * avoids changing directory when g:netrw_keepdir is false
	v55: * -bar used with :Explore :Sexplore etc to allow multiple
	       commands to be separated by |s
	     * browser listings now use the "nowrap" option
	     * browser: some unuseful error messages now suppressed
	v54: * For backwards compatibility, Explore and Sexplore have been
	       implemented.  In addition, Hexplore and Vexplore commands
	       are available, too.
	     * <amatch> used instead of <afile> in the transparency
	       support (BufReadCmd, FileReadCmd, FileWriteCmd)
	     * ***netrw*** prepended to various error messages netrw may emit
	     * g:netrw_port used instead of b:netrw_port for scp
	     * any leading [:#] is removed from port numbers
	v53: * backslashes as well as slashes placed in various patterns
	       (ex. g:netrw_sort_sequence) to better support Windows
	v52: * nonumber'ing now set for browsing buffers
	     * when the hiding list hid all files, error messages ensued. Fixed
	     * when browsing, swf is set, but directory is not set, when netrw
	       was attempting to restore options, vim wanted to save a swapfile
	       to a local directory using an url-style path.  Fixed
	v51: * cygwin detection now automated (using windows and &shell is bash)
	     * customizable browser "file" rejection patterns
	     * directory history
	     * :[range]w url  now supported (ie. netrw has a FileWriteCmd event)
	     * error messages have a "Press <cr> to continue" to allow them
	       to be seen
	     * directory browser displays no longer bother the swapfile
	     * u/U commands to go up and down the history stack
	     * history stack may be saved with viminfo with its "!" option
	     * bugfixes associated with unwanted [No Files] entries
	v50: * directories now displayed using buftype=nofile; should keep the
	       directory names as-is
	     * attempts to remove empty "[No File]" buffers leftover
	       from :file ..name.. commands
	     * bugfix: a "caps-lock" editing difficulty left in v49 was fixed
	     * syntax highlighting for "Showing:" the hiding list included
	     * bookmarks can now be retained if "!" is in the viminfo option
	v49: * will use ftp for http://.../ browsing v48:
	     * One may use ftp to do remote host file browsing
	     * (windows and !cygwin) remote browsing with ftp can now use
	       the "dir" command internally to provide listings
	     * g:netrw_keepdir now allows one to keep the initial current
	       directory as the current directory (normally the local file
	       browser makes the currently viewed directory the current
	       directory)
	     * g:netrw_alto and g:netrw_altv now support alternate placement
	       of windows started with o or v
	     * Nread ? and Nwrite ?  now uses echomsg (instead of echo) so
	       :messages can repeat showing the help
	     * bugfix: avoids problems with partial matches of directory names
	       to prior buffers with longer names
	     * one can suppress error messages with g:netrw_quiet ctrl-h used
	     * instead of <Leader>h for editing hiding list one may edit the
	     * sorting sequence with the S map now allows confirmation of
	     * deletion with [y(es) n(o) a(ll) q(uit)] the "x" map now handles
	     * special file viewing with:
	       (windows) rundll32 url.dll (gnome)   gnome-open (kde)
	       kfmclient If none of these are on the executable path, then
	       netrwFileHandlers.vim is used.
	     * directory bookmarking during both local and remote browsing
	       implemented
	     * one may view all, use the hiding list to suppress, or use the
	       hiding list to show-only remote and local file/directory
	       listings
	     * improved unusual file and directory name handling preview
	     * window support
	v47: * now handles local directory browsing.
	v46: * now handles remote directory browsing
	     * g:netrw_silent (if 1) will cause all transfers to be silent
	v45: * made the [user@]hostname:path form a bit more restrictive to
	       better handle errors in using protocols (e.g. scp:usr@host:file
	       was being recognized as an rcp request) v44: * changed from
	       "rsync -a" to just "rsync"
	     * somehow an editing error messed up the test to recognize
	       use of the fetch method for NetRead.
	     * more debugging statements included
	v43: * moved "Explanation" comments to <pi_netrw.txt> help file as
	       "Network Reference" (|netrw-ref|)
	     * <netrw.vim> now uses Dfunc() Decho() and Dret() for debugging
	     * removed superfluous NetRestorePosn() calls
	v42: * now does BufReadPre and BufReadPost events on file:///* and
	       file://localhost/* v41: * installed file:///* and
	       file://localhost/* handling v40: * prevents redraw when a
	       protocol error occurs so that the user may see it v39: * sftp
	       support v38: * Now uses NetRestorePosn() calls with
	       Nread/Nwrite commands
	     * Temporary files now removed via bwipe! instead of bwipe
	       (thanks to Dave Roberts) v37: * Claar's modifications which
	       test if ftp is successful, otherwise give an error message
	     * After a read, the alternate file was pointing to the temp file.
	       The temp file buffer is now wiped out.
	     * removed silent from transfer methods so user can see what's
	       happening


==============================================================================
12. Credits						*netrw-credits* {{{1

	Vim editor	by Bram Moolenaar (Thanks, Bram!)
	dav		support by C Campbell
	fetch		support by Bram Moolenaar and C Campbell
	ftp		support by C Campbell <NdrOchip@ScampbellPfamily.AbizM>
	http		support by Bram Moolenaar <bram@moolenaar.net>
	rcp
	rsync		support by C Campbell (suggested by Erik Warendorph)
	scp		support by raf <raf@comdyn.com.au>
	sftp		support by C Campbell

	inputsecret(), BufReadCmd, BufWriteCmd contributed by C Campbell

	Jérôme Augé		-- also using new buffer method with ftp+.netrc
	Bram Moolenaar		-- obviously vim itself, :e and v:cmdarg use,
	                           fetch,...
	Yasuhiro Matsumoto	-- pointing out undo+0r problem and a solution
	Erik Warendorph		-- for several suggestions (g:netrw_..._cmd
				   variables, rsync etc)
	Doug Claar		-- modifications to test for success with ftp
	                           operation

==============================================================================
 vim:tw=78:ts=8:ft=help:norl:fdm=marker
