*pi_netrw.txt*  For Vim version 7.3.  Last change: 2010 Jul 28

	    -----------------------------------------------------
	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
	    -----------------------------------------------------
Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
	  (remove NOSPAM from Campbell's email first)

Copyright: Copyright (C) 1999-2010 Charles E Campbell, Jr    *netrw-copyright*
	   Permission is hereby granted to use and distribute this code, with
	   or without modifications, provided that this copyright notice is
	   copied with it. Like anything else that's free, netrw.vim,
	   netrwPlugin.vim, netrwFileHandlers.vim, netrwSettings.vim,
	   syntax/netrw.vim, and pi_netrw.txt are provided *as is* and comes
	   with no warranty of any kind, either expressed or implied.  No
	   guarantees of merchantability.  No guarantees of suitability for
	   any purpose.  By using this plugin, you agree that in no event will
	   the copyright holder be liable for any damages resulting from the
	   use of this software.


		*dav*    *ftp*    *netrw-file*  *rcp*    *scp*
		*davs*   *http*   *netrw.vim*   *rsync*  *sftp*
		*fetch*  *netrw*  *network*

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

1.  Contents.............................................|netrw-contents|
2.  Starting With Netrw..................................|netrw-start|
3.  Netrw Reference......................................|netrw-ref|
      EXTERNAL APPLICATIONS AND PROTOCOLS................|netrw-externapp|
      READING............................................|netrw-read|
      WRITING............................................|netrw-write|
      SOURCING...........................................|netrw-source|
      DIRECTORY LISTING..................................|netrw-dirlist|
      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
      VARIABLES AND SETTINGS.............................|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 Editing.............................|netrw-transparent|
7.  Ex Commands..........................................|netrw-ex|
8.  Variables and Options................................|netrw-var|
9.  Browsing.............................................|netrw-browse|
      Introduction To Browsing...........................|netrw-intro-browse|
      Quick Reference: Maps..............................|netrw-browse-maps|
      Quick Reference: Commands..........................|netrw-browse-cmds|
      Bookmarking A Directory............................|netrw-mb|
      Browsing...........................................|netrw-cr|
      Browsing With A Horizontally Split Window..........|netrw-o|
      Browsing With A New Tab............................|netrw-t|
      Browsing With A Vertically Split Window............|netrw-v|
      Change Listing Style.(thin wide long tree).........|netrw-i|
      Changing To A Bookmarked Directory.................|netrw-gb|
      Changing To A Predecessor Directory................|netrw-u|
      Changing To A Successor Directory..................|netrw-U|
      Customizing Browsing With A User Function..........|netrw-x|
      Deleting Bookmarks.................................|netrw-mB|
      Deleting Files Or Directories......................|netrw-D|
      Directory Exploring Commands.......................|netrw-explore|
      Exploring With Stars and Patterns..................|netrw-star|
      Displaying Information About File..................|netrw-qf|
      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
      Editing The Sorting Sequence.......................|netrw-S|
      Going Up...........................................|netrw--|
      Hiding Files Or Directories........................|netrw-a|
      Improving Browsing.................................|netrw-ssh-hack|
      Listing Bookmarks And History......................|netrw-qb|
      Making A New Directory.............................|netrw-d|
      Making The Browsing Directory The Current Directory|netrw-c|
      Marking Files......................................|netrw-mf|
      Marking Files By Regular Expression................|netrw-mr|
      Marked Files: Arbitrary Command....................|netrw-mx|
      Marked Files: Compression And Decompression........|netrw-mz|
      Marked Files: Copying..............................|netrw-mc|
      Marked Files: Diff.................................|netrw-md|
      Marked Files: Editing..............................|netrw-me|
      Marked Files: Grep.................................|netrw-mg|
      Marked Files: Hiding and Unhiding by Suffix........|netrw-mh|
      Marked Files: Moving...............................|netrw-mm|
      Marked Files: Printing.............................|netrw-mp|
      Marked Files: Sourcing.............................|netrw-ms|
      Marked Files: Tagging..............................|netrw-mT|
      Marked Files: Setting the Target Directory.........|netrw-mt|
      Marked Files: Unmarking............................|netrw-mu|
      Netrw Browser Variables............................|netrw-browser-var|
      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
      Netrw Settings.....................................|netrw-settings|
      Obtaining A File...................................|netrw-O|
      Preview Window.....................................|netrw-p|
      Previous Window....................................|netrw-P|
      Refreshing The Listing.............................|netrw-ctrl-l|
      Renaming Files Or Directories......................|netrw-move|
      Reversing Sorting Order............................|netrw-r|
      Selecting Sorting Style............................|netrw-s|
      Setting Editing Window.............................|netrw-C|
10. Problems and Fixes...................................|netrw-problems|
11. Debugging Netrw Itself...............................|netrw-debug|
12. History..............................................|netrw-history|
13. Todo.................................................|netrw-todo|
14. Credits..............................................|netrw-credits|

{Vi does not have any of this}

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

Netrw makes reading files, writing files, browsing over a network, and
local browsing 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; if you can use scp, try: >

	vim scp://hostname/path/to/file
<
Want to make ssh/scp easier to use? Check out |netrw-ssh-hack|!

So, 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 -- 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 are more protocols supported by netrw than just scp and ftp, too: see the
next section, |netrw-externapp|, on how to use these external applications with
netrw and vim.

PREVENTING LOADING						*netrw-noload*

If you want to use plugins, but for some reason don't wish to use netrw, then
you need to avoid loading both the plugin and the autoload portions of netrw.
You may do so by placing the following two lines in your <.vimrc>: >

	:let g:loaded_netrw       = 1
	:let g:loaded_netrwPlugin = 1
<

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

   Netrw supports several protocols in addition to scp and ftp as mentioned
   in |netrw-start|.  These include dav, fetch, http,... well, just look
   at the list in |netrw-externapp|.  Each protocol is associated with a
   variable which holds the default command supporting that protocol.

EXTERNAL APPLICATIONS AND PROTOCOLS			*netrw-externapp* {{{2

	Protocol  Variable	    Default Value
	--------  ----------------  -------------
	   dav:  *g:netrw_dav_cmd*   = "cadaver"     if cadaver is executable
	   dav:   g:netrw_dav_cmd    = "curl -o"     elseif curl is available
	 fetch:  *g:netrw_fetch_cmd* = "fetch -o"    if fetch is available
	   ftp:  *g:netrw_ftp_cmd*   = "ftp"
	  http:  *g:netrw_http_cmd*  = "elinks"     if   elinks  is available
	  http:   g:netrw_http_cmd   = "links"      elseif links is available
	  http:   g:netrw_http_cmd   = "curl"       elseif curl  is available
	  http:   g:netrw_http_cmd   = "wget"       elseif wget  is available
          http:   g:netrw_http_cmd   = "fetch"      elseif 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"

	*g:netrw_http_xcmd* : the option string for http://... protocols are
	specified via this variable and may be independently overridden.  By
	default, the option arguments for the http-handling commands are: >

		    elinks : "-source >"
		    links  : "-source >"
		    curl   : "-o"
		    wget   : "-q -O"
		    fetch  : "-o"
<
	For example, if your system has elinks, and you'd rather see the
	page using an attempt at rendering the text, you may wish to have >
		let g:netrw_http_xcmd= "-dump >"
<	in your .vimrc.


READING						*netrw-read* *netrw-nread* {{{2

	Generally, one may just use the url notation with a normal editing
	command, such as >

		:e ftp://[user@]machine/path
<
	Netrw also provides the Nread command:

	: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* {{{2

	One may just use the url notation with a normal file writing
	command, such as >

		:w ftp://[user@]machine/path
<
	Netrw also provides the Nwrite command:

	: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* {{{2

	One may just use the url notation with the normal file sourcing
	command, such as >

		:so ftp://[user@]machine/path
<
	Netrw also provides the Nsource command:

	: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* {{{2

	One may browse a directory to get a listing by simply attempting to
	edit the directory: >

		:e scp://[user]@hostname/path/
		:e ftp://[user]@hostname/path/
<
	For remote directories (ie. those using scp or ftp), that trailing
	"/" is necessary (the slash tells netrw to treat the argument as a
	directory to browse instead of a file to download).

	However, the Nread command can also be used to accomplish this:

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

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

	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
	s: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-ssh-hack|).

	: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

NETRW VARIABLES AND SETTINGS				*netrw-variables* {{{2
(also see: |netrw-browser-var| |netrw-protocol| |netrw-settings| |netrw-var|)

Netrw provides a lot of variables which allow you to customize netrw to your
preferences.  One way to look at them is via the command :NetrwSettings (see
|netrw-settings|) which will display your current netrw settings.  Most such
settings are described below, in |netrw-browser-options|, and in
|netrw-externapp|:

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

 *g:netrw_bufsettings*	the settings that netrw buffers have
 		      (default) noma nomod nonu nowrap ro nobl

 *g:netrw_chgwin*	specifies a window number where file edits will take
		      place.  (also see |netrw-C|)
		      (default) not defined

 *g:Netrw_funcref*	specifies a function (or functions) to be called when
		      netrw edits a file.  The file is first edited, and
		      then the function reference (|Funcref|) is called.
		      This variable may also hold a |List| of Funcrefs.
		      (default) not defined
>
			    Example: place in .vimrc; affects all file opening
			    fun! MyFuncRef()
			    endfun
			    let g:Netrw_funcref= function("MyFuncRef")
<
 *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_ftpextracmd*	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-vim-session basis
 *s:netrw_passwd*	(ftp) password,     retained on a per-vim-session basis

 *g:netrw_preview*	=0 (default) preview window shown in a horizontally
                         split window
		      =1 preview window shown in a vertically split window.
		      Also affects the "previous window" (see |netrw-P|) in
		      the same way.

 *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_sepchr*	=\0xff
		      =\0x01 for enc == euc-jp (and perhaps it should be for
			                          others, too, please let me
						  know)
		      Separates priority codes from filenames internally.
		      See |netrw-p12|.

  *g:netrw_silent*	=0 : transfers done normally
		      =1 : transfers done silently

 *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* {{{2

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 in 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* {{{1

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, it's 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.

Now, a word about Jan Minář's "FTP User Name and Password Disclosure"; first,
ftp is not a secure protocol.  User names and passwords are transmitted "in
the clear" over the internet; any snooper tool can pick these up; this is not
a netrw thing, this is a ftp thing.  If you're concerned about this, please
try to use scp or sftp instead.

Netrw re-uses the user id and password during the same vim session and so long
as the remote hostname remains the same.

Jan seems to be a bit confused about how netrw handles ftp; normally multiple
commands are performed in a "ftp session", and he seems to feel that the
uid/password should only be retained over one ftp session.  However, netrw
does every ftp operation in a separate "ftp session"; so remembering the
uid/password for just one "ftp session" would be the same as not remembering
the uid/password at all.  IMHO this would rapidly grow tiresome as one
browsed remote directories, for example.

On the other hand, thanks go to Jan M. for pointing out the many
vulnerabilities that netrw (and vim itself) had had in handling "crafted"
filenames.  The |shellescape()| and |fnameescape()| functions were written in
response by Bram Moolenaar to handle these sort of problems, and netrw has
been modified to use them.  Still, my advice is, if the "filename" looks like
a vim command that you aren't comfortable with having executed, don't open it.

				*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 available (ie. executable), it may be preferable
to use it for ftp://... based transfers.

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 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    |
  +---------------------------------+----------------------------+------------+
  | DAV + SSL:                      |                            |            |
  |  davs://host/path               |                            | cadaver    |
  |  :Nread davs://host/path        | :Nwrite davs://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 <.netrc> file, typically located in your home directory, contains lines
therein which map a hostname (machine name) to the user id and password you
prefer to use with it.

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!  Ie. for Linux/Unix: chmod 600 .netrc


PASSWORD						*netrw-passwd*

The script attempts to get passwords for ftp invisibly using |inputsecret()|,
a built-in Vim function.  See |netrw-userpass| 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-ssh-hack| can help with this problem.


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

Network-oriented file transfers are available by default whenever Vim's
|'nocompatible'| mode is enabled.  Netrw's script files reside in your
system's plugin, autoload, and syntax directories; just the
plugin/netrwPlugin.vim script is sourced automatically whenever you bring up
vim.  The main script in autoload/netrw.vim is only loaded when you actually
use netrw.  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 Editing			*netrw-transparent* {{{1

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

	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* {{{1

The usual read/write commands are supported.  There are also a few
additional commands available.  Often you won't need to use Nwrite 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.

						*:Nwrite*  *:Nw*
:[range]Nw[rite]	Write the specified lines to the current
		file as specified in b:netrw_lastfile.
		(related: |netrw-nwrite|)

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

						*:Nread*   *:Nr*
:Nr[ead]	Read the lines from the file specified in b:netrw_lastfile
		into the current buffer.  (related: |netrw-nread|)

:Nr[ead] {netfile} {netfile}...
		Read the {netfile} after the current line.

						*:Nsource* *:Ns*
:Ns[ource] {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"
<		 (related: |netrw-source|)

:call NetUserPass()				*NetUserPass()*
		If g:netrw_uid and s:netrw_passwd don't exist,
		this function will query the user for them.
		(related: |netrw-userpass|)

:call NetUserPass("userid")
		This call will set the g:netrw_uid and, if
		the password doesn't exist, will query the user for it.
		(related: |netrw-userpass|)

:call NetUserPass("userid","passwd")
		This call will set both the g:netrw_uid and s:netrw_passwd.
		The user-id and password are used by ftp transfers.  One may
		effectively remove the user-id and password by using empty
		strings (ie. "").
		(related: |netrw-userpass|)

: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* {{{1

(if you're interested in the netrw browser settings, see: |netrw-browser-var|)

The <netrw.vim> script provides several variables which act as options to
affect <netrw.vim>'s file transfer behavior.  These variables typically may be
set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
>
                        -------------
                        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_silent          =0 transfers done normally
	                        =1 transfers done silently
        g:netrw_uid             Holds current user-id for ftp.
        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
	--------		------------------------------------
<
	b:netrw_method		Index indicating rcp/ftp+.netrc/ftp
	w:netrw_method		(same as b:netrw_method)
	g:netrw_machine		Holds machine name parsed from input
	b: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"      if cadaver  is executable
    g:netrw_dav_cmd    variable   ="curl -o"      elseif curl is executable
    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). Example: >

	let g:netrw_ftp_cmd= "ftp -p"
<
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_ftpextracmd]                  [g:netrw_ftpmode]
       get filename tempfile                  [g:netrw_extracmd]
                                              get filename tempfile >
  ---------------------------------------------------------------------
<
The |g:netrw_ftpmode| and |g:netrw_ftpextracmd| 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() 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. Browsing		*netrw-browsing* *netrw-browse* *netrw-help* {{{1
			*netrw-browser*  *netrw-dir*    *netrw-list*

INTRODUCTION TO BROWSING			*netrw-intro-browse* {{{2
	(Quick References: |netrw-quickmaps| |netrw-quickcoms|)

Netrw supports the browsing of directories on your local system and on remote
hosts; browsing includes listing files and directories, entering directories,
editing files therein, deleting files/directories, making new directories,
moving (renaming) files and directories, copying files and directories, etc.
One may mark files and execute any system command on them!  The Netrw browser
generally implements the previous explorer's maps and commands for remote
directories, although details (such as pertinent global variable names)
necessarily differ.  To browse a directory, simply "edit" it! >

	vim /your/directory/
	vim .
	vim c:\your\directory\
<
(Related topics: |netrw-cr|  |netrw-o|  |netrw-p| |netrw-P| |netrw-t|
                 |netrw-mf|  |netrw-mx| |netrw-D| |netrw-R| |netrw-v| )

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 also to use ftp
in its remote browsing.  Specifying any other protocol will cause it to be
used for file transfers; but the ssh protocol will be used to do remote
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/
<
where [protocol] is typically scp or ftp.  As an example, try: >

	vim ftp://ftp.home.vim.org/pub/vim/
<
For local directories, the trailing slash is not required.  Again, because it's
easy to miss: to browse remote directories, the url must terminate with a
slash!

If you'd like to avoid entering the password repeatedly for remote directory
listings with ssh or scp, see |netrw-ssh-hack|.  To avoid password entry with
ftp, see |netrw-netrc| (if your ftp supports it).

There are several things you can do to affect the browser's display of files:

	* To change the listing style, press the "i" key (|netrw-i|).
	  Currently there are four styles: thin, long, wide, and tree.
	  To make that change "permanent", see |g:netrw_liststyle|.

	* To hide files (don't want to see those xyz~ files anymore?) see
	  |netrw-ctrl-h|.

	* Press s to sort files by name, time, or size.

See |netrw-browse-cmds| for all the things you can do with netrw!

			*netrw-getftype* *netrw-filigree* *netrw-ftype*
The |getftype()| function is used to append a bit of filigree to indicate
filetype to locally listed files:

	directory  : /
	executable : *
	fifo       : |
	links      : @
	sockets    : =

The filigree also affects the |g:netrw_sort_sequence|.


QUICK HELP						*netrw-quickhelp* {{{2
                       (Use ctrl-] to select a topic)~
	Intro to Browsing...............................|netrw-intro-browse|
	  Quick Reference: Maps.........................|netrw-quickmap|
	  Quick Reference: Commands.....................|netrw-browse-cmds|
	Hiding
	  Edit hiding list..............................|netrw-ctrl-h|
	  Hiding Files or Directories...................|netrw-a|
	  Hiding/Unhiding by suffix.....................|netrw-mh|
	  Hiding  dot-files.............................|netrw-gh|
	Listing Style
	  Select listing style (thin/long/wide/tree)....|netrw-i|
	  Associated setting variable...................|g:netrw_liststyle|
	  Shell command used to perform listing.........|g:netrw_list_cmd|
	  Quick file info...............................|netrw-qf|
	Sorted by
	  Select sorting style (name/time/size).........|netrw-s|
	  Editing the sorting sequence..................|netrw-S|
	  Sorting options...............................|g:netrw_sort_options|
	  Associated setting variable...................|g:netrw_sort_sequence|
	  Reverse sorting order.........................|netrw-r|


				*netrw-quickmap* *netrw-quickmaps*
QUICK REFERENCE: MAPS				*netrw-browse-maps* {{{2
>
	  ---			-----------------			----
	  Map			Quick Explanation			Link
	  ---			-----------------			----
<	 <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)
	   c	Make browsing directory the current directory        |netrw-c|
	   C	Setting the editing window                           |netrw-C|
	   d	Make a directory                                     |netrw-d|
	   D	Attempt to remove the file(s)/directory(ies)         |netrw-D|
	   gb	Go to previous bookmarked directory                  |netrw-gb|
	   gh	Quick hide/unhide of dot-files                       |netrw-gh|
	 <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|
	   mb	Bookmark current directory                           |netrw-mb|
	   mc	Copy marked files to marked-file target directory    |netrw-mc|
	   md	Apply diff to marked files (up to 3)                 |netrw-md|
	   me	Place marked files on arg list and edit them         |netrw-me|
	   mf	Mark a file                                          |netrw-mf|
	   mh	Toggle marked file suffices' presence on hiding list |netrw-mh|
	   mm	Move marked files to marked-file target directory    |netrw-mm|
	   mp	Print marked files                                   |netrw-mp|
	   mr	Mark files satisfying a shell-style |regexp|         |netrw-mr|
	   mt	Current browsing directory becomes markfile target   |netrw-mt|
	   mT	Apply ctags to marked files                          |netrw-mT|
	   mu	Unmark all marked files                              |netrw-mu|
	   mx	Apply arbitrary shell command to marked files        |netrw-mx|
	   mz	Compress/decompress marked files                     |netrw-mz|
	   o	Enter the file/directory under the cursor in a new   |netrw-o|
		browser window.  A horizontal split is used.
	   O	Obtain a file specified by cursor                    |netrw-O|
	   p	Preview the file                                     |netrw-p|
	   P	Browse in the previously used window                 |netrw-P|
	   qb	List bookmarked directories and history              |netrw-qb|
	   qf	Display information on file                          |netrw-qf|
	   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   |netrw-v|
		browser window.  A vertical split is used.
	   x	View file with an associated program                 |netrw-x|

	   %	Open a new file in netrw's current directory         |netrw-%|

	*netrw-mouse* *netrw-leftmouse* *netrw-middlemouse* *netrw-rightmouse*
	<leftmouse>	(gvim only) selects word under mouse as if a <cr>
			had been pressed (ie. edit file, change directory)
	<middlemouse>	(gvim only) same as P selecting word under mouse;
			see |netrw-P|
	<rightmouse>	(gvim only) delete file/directory using word under
			mouse
	<2-leftmouse>	(gvim only) when:
	                 * in a netrw-selected file, AND
		         * |g:netrw_retmap| == 1     AND
		         * the user doesn't already have a <2-leftmouse> mapping
			   defined before netrw is autoloaded,
			then a double clicked leftmouse button will return
			to the netrw browser window.  See |g:netrw_retmap|.
	<s-leftmouse>	(gvim only) like mf, will mark files

	(to disable mouse buttons while browsing: |g:netrw_mousemaps|)

				*netrw-quickcom* *netrw-quickcoms*
QUICK REFERENCE: COMMANDS	*netrw-explore-cmds* *netrw-browse-cmds* {{{2
     :NetrwClean[!] ...........................................|netrw-clean|
     :NetrwSettings ...........................................|netrw-settings|
     :Explore[!]  [dir] Explore directory of current file......|netrw-explore|
     :Hexplore[!] [dir] Horizontal Split & Explore.............|netrw-explore|
     :Nexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
     :Pexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|
     :Rexplore          Return to Explorer.....................|netrw-explore|
     :Sexplore[!] [dir] Split & Explore directory .............|netrw-explore|
     :Texplore[!] [dir] Tab & Explore..........................|netrw-explore|
     :Vexplore[!] [dir] Vertical Split & Explore...............|netrw-explore|

BOOKMARKING A DIRECTORY	*netrw-mb* *netrw-bookmark* *netrw-bookmarks* {{{2

One may easily "bookmark" a directory by using >

	mb
<
Bookmarks are retained in between sessions in a $HOME/.netrwbook file, and are
kept in sorted order.

Related Topics:
	|netrw-gb| how to return (go) to a bookmark
	|netrw-mB| how to delete bookmarks
	|netrw-qb| how to list bookmarks


BROWSING						*netrw-cr* {{{2

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 sequential 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 instead of the
default.  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.


When using the gui (gvim), one may select a file by pressing the <leftmouse>
button.  In addition, if

 *|g:netrw_retmap| == 1      AND   (its default value is 0)
 * in a netrw-selected file, AND
 * the user doesn't already have a <2-leftmouse> mapping defined before
   netrw is loaded

then a doubly-clicked leftmouse button will return to the netrw browser
window.

Netrw attempts to speed up browsing, especially for remote browsing where one
may have to enter passwords, by keeping and re-using previously obtained
directory listing buffers.  The |g:netrw_fastbrowse| variable is used to
control this behavior; one may have slow browsing (no buffer re-use), medium
speed browsing (re-use directory buffer listings only for remote directories),
and fast browsing (re-use directory buffer listings as often as possible).
The price for such re-use is that when changes are made (such as new files
are introduced into a directory), the listing may become out-of-date.  One may
always refresh directory listing buffers by pressing ctrl-L (see
|netrw-ctrl-l|).


Related topics: |netrw-o| |netrw-p| |netrw-P| |netrw-t| |netrw-v|
Associated setting variables: |g:netrw_browse_split|      |g:netrw_fastbrowse|
                              |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd|
			      |g:netrw_ftp_timelist_cmd|  |g:netrw_ssh_cmd|
			      |g:netrw_ssh_browse_reject| |g:netrw_use_noswf|


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

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-T| |netrw-v|)

Associated setting variables: |g:netrw_alto| |g:netrw_winsize|


BROWSING WITH A NEW TAB				*netrw-t* *netrw-T* {{{2

Normally one enters a file or directory using the <cr>.  The "t" map
allows one to open a new window holding the new directory listing or file in
a new tab.  The "T" version puts the file or directory into a background tab
(see |gT|)

Related actions:  |netrw-o| |netrw-v|


BROWSING WITH A VERTICALLY SPLIT WINDOW			*netrw-v* {{{2

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| |netrw-T|)

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.

Associated setting variable: |g:netrw_altv| |g:netrw_winsize|


CHANGE LISTING STYLE  (THIN LONG WIDE TREE)   			*netrw-i* {{{2

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

The thin 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.

One may make a preferred listing style your default; see |g:netrw_liststyle|.
As an example, by putting the following line in your .vimrc, >
	let g:netrw_liststyle= 4
the tree style will become your default listing style.

Associated setting variables: |g:netrw_liststyle| |g:netrw_maxfilenamelen|
                              |g:netrw_timefmt|   |g:netrw_list_cmd|

CHANGE FILE PERMISSION						*netrw-gp* {{{2

"gp" will ask you for a new permission for the file named under the cursor.
Currently, this only works for local files.

Associated setting variables: |g:netrw_chgperm|


CHANGING TO A BOOKMARKED DIRECTORY			*netrw-gb*  {{{2

To change directory back to a bookmarked directory, use

	{cnt}gb

Any count may be used to reference any of the bookmarks.

Related Topics:
	|netrw-mB| how to delete bookmarks
	|netrw-mb| how to make a bookmark
	|netrw-qb| how to list bookmarks


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

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, it's 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* {{{2

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-qb|)


NETRW CLEAN					*netrw-clean* *:NetrwClean*

With :NetrwClean one may easily remove netrw from one's home directory;
more precisely, from the first directory on your |'runtimepath'|.

With :NetrwClean!, netrw will remove netrw from all directories on your
|'runtimepath'|.

With either form of the command, netrw will first ask for confirmation
that the removal is in fact what you want to do.  If netrw doesn't have
permission to remove a file, it will issue an error message.

						*netrw-gx*
CUSTOMIZING BROWSING WITH A USER FUNCTION	*netrw-x* *netrw-handler* {{{2
						(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.
  * for Mac OS X               : open 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 <autoload/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.

Associated setting variable: |g:netrw_browsex_viewer|

							*netrw-curdir*
DELETING BOOKMARKS					*netrw-mB* {{{2

To delete a bookmark, use >

	{cnt}mB
<
Related Topics:
	|netrw-gb| how to return (go) to a bookmark
	|netrw-mb| how to make a bookmark
	|netrw-qb| how to list bookmarks


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

If files have not been marked with |netrw-mf|:   (local marked file list)

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

If files have been marked with |netrw-mf|:   (local marked file list)

    Marked files (and empty directories) will be deleted; again, you'll be
    asked to confirm the deletion before it actually takes place.

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

Associated setting variable: |g:netrw_local_rmdir| |g:netrw_rm_cmd|
                             |g:netrw_rmdir_cmd|   |g:netrw_ssh_cmd|


*netrw-explore*  *netrw-hexplore* *netrw-nexplore* *netrw-pexplore*
*netrw-rexplore* *netrw-sexplore* *netrw-texplore* *netrw-vexplore*
DIRECTORY EXPLORATION COMMANDS  {{{2

     :[N]Explore[!]  [dir]... Explore directory of current file      *:Explore*
     :[N]Hexplore[!] [dir]... Horizontal Split & Explore             *:Hexplore*
     :Rexplore            ... Return to Explorer                     *:Rexplore*
     :[N]Sexplore[!] [dir]... Split&Explore current file's directory *:Sexplore*
     :Texplore       [dir]... Tab              & Explore             *:Texplore*
     :[N]Vexplore[!] [dir]... Vertical   Split & Explore             *:Vexplore*

     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.

The [N] will override |g:netrw_winsize| to specify the quantity of rows and/or
columns the new explorer window should have.

Otherwise, the |g:netrw_winsize| variable, if it has been specified by the
user, is used to control the quantity of rows and/or columns new explorer
windows should have.

:Rexplore  This command is a little different from the others.  When one
           edits a file, for example by pressing <cr> when atop a file in
	   a netrw browser window, :Rexplore will return the display to
	   that of the last netrw browser window.  It is a command version
	   of the <2-leftmouse> map (which is only available under gvim and
	   cooperative terms).


*netrw-star* *netrw-starpat* *netrw-starstar* *netrw-starstarpat*
EXPLORING WITH STARS AND PATTERNS

When Explore, Sexplore, Hexplore, or Vexplore are used with one of the
following four styles, Explore generates a list of files which satisfy
the request. >

    */filepat	files in current directory which satisfy filepat
    **/filepat	files in current directory or below which satisfy the
		file pattern
    *//pattern	files in the current directory which contain the
		pattern (vimgrep is used)
    **//pattern	files in the current directory or below which contain
		the pattern (vimgrep is used)
<
The cursor will be placed on the first file in the list.  One may then
continue to go to subsequent files on that list via |:Nexplore| or to
preceding files on that list with |:Pexplore|.  Explore will update the
directory and place the cursor appropriately.

A plain >
	:Explore
will clear the explore list.

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

Associated setting variables: |g:netrw_keepdir|      |g:netrw_browse_split|
                              |g:netrw_fastbrowse|   |g:netrw_ftp_browse_reject|
			      |g:netrw_ftp_list_cmd| |g:netrw_ftp_sizelist_cmd|
			      |g:netrw_ftp_timelist_cmd| |g:netrw_list_cmd|
			      |g:netrw_liststyle|


DISPLAYING INFORMATION ABOUT FILE				*netrw-qf* {{{2

With the cursor atop a filename, pressing "qf" will reveal the file's size
and last modification timestamp.  Currently this capability is only available
for local files.


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

The "<ctrl-h>" map brings up a requestor allowing the user to change the
file/directory hiding list contained in |g:netrw_list_hide|.  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|).

The "gh" mapping (see |netrw-gh|) quickly alternates between the usual
hiding list and the hiding of files or directories that begin with ".".

As an example, >
	let g:netrw_list_hide= '\(^\|\s\s\)\zs\.\S\+'
Effectively, this makes the effect of a |netrw-gh| command the initial setting.
What it means:

	\(^\|\s\s\)   : if the line begins with the following, -or-
	                two consecutive spaces are encountered
	\zs           : start the hiding match now
	\.            : if it now begins with a dot
	\S\+          : and is followed by one or more non-whitespace
	                characters

Associated setting variables: |g:netrw_hide| |g:netrw_list_hide|
Associated topics: |netrw-a| |netrw-gh| |netrw-mh|


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

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 (all one line):

For Unix: >
	'[\/]$,\<core\%(\.\d\+\)\=,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,
	\.info$,\.swp$,\.bak$,\~$'
<
Otherwise: >
	'[\/]$,\.[a-np-z]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,
	\.swp$,\.bak$,\~$'
<
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.

Related topics:               |netrw-s|               |netrw-S|
Associated setting variables: |g:netrw_sort_sequence| |g:netrw_sort_options|


GOING UP							*netrw--* {{{2

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 browsing
expects that directories will be flagged by a trailing slash.


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

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.

If no files have been marked via |netrw-mf|:

The "a" map allows the user to cycle through the three hiding modes.

The |g:netrw_list_hide| variable holds a comma delimited list of patterns
based on regular expressions (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 mode (normal/hiding/show) you
want!

If files have been marked using |netrw-mf|, then this command will:

  if showing all files or non-hidden files:
   modify the g:netrw_list_hide list by appending the marked files to it
   and showing only non-hidden files.

  else if showing hidden files only:
   modify the g:netrw_list_hide list by removing the marked files from it
   and showing only non-hidden files.
  endif

					*netrw-gh* *netrw-hide*
As a quick shortcut, one may press >
	gh
to toggle between hiding files which begin with a period (dot) and not hiding
them.

Associated setting variable: |g:netrw_list_hide|
Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|

IMPROVING BROWSING			*netrw-listhack* *netrw-ssh-hack* {{{2

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 based on that article and on a communication from
Ben Schmidt:

	1. Generate a public/private key pair on the local machine
	   (ssh client): >
		ssh-keygen -t rsa
		(saving the file in ~/.ssh/id_rsa as prompted)
<
	2. Just hit the <CR> when asked for passphrase (twice) for no
	   passphrase.  If you do use a passphrase, you will also need to use
	   ssh-agent so you only have to type the passphrase once per session.
	   If you don't use a passphrase, simply logging onto your local
	   computer or getting access to the keyfile in any way will suffice
	   to access any ssh servers which have that key authorized for login.

	3. This creates two files: >
		~/.ssh/id_rsa
		~/.ssh/id_rsa.pub
<
	4. On the target machine (ssh server): >
		cd
		mkdir -p .ssh
		chmod 0700 .ssh
<
	5. On your local machine (ssh client): (one line) >
		ssh {serverhostname}
		  cat '>>' '~/.ssh/authorized_keys2' < ~/.ssh/id_rsa.pub
<
	   or, for OpenSSH, (one line) >
		ssh {serverhostname}
		  cat '>>' '~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub
<
You can test it out with >
	ssh {serverhostname}
and you should be log onto the server machine without further need to type
anything.

If you decided to use a passphrase, do: >
	ssh-agent $SHELL
	ssh-add
	ssh {serverhostname}
You will be prompted for your key passphrase when you use ssh-add, but not
subsequently when you use ssh.  For use with vim, you can use >
	ssh-agent vim
and, when next within vim, use >
	:!ssh-add
Alternatively, you can apply ssh-agent to the terminal you're planning on
running vim in: >
	ssh-agent xterm &
and do ssh-add whenever you need.

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

Kingston Fung wrote about another way to avoid constantly needing to enter
passwords:

    In order to avoid the need to type in the password for scp each time, you
    provide a hack in the docs to set up a non password ssh account. I found a
    better way to do that: I can use a regular ssh account which uses a
    password to access the material without the need to key-in the password
    each time. It's good for security and convenience. I tried ssh public key
    authorization + ssh-agent, implementing this, and it works! Here are two
    links with instructions:

    http://www.ibm.com/developerworks/library/l-keyc2/
    http://sial.org/howto/openssh/publickey-auth/


LISTING BOOKMARKS AND HISTORY		*netrw-qb* *netrw-listbookmark* {{{2

Pressing "qb" (query bookmarks) will list both the bookmarked directories and
directory traversal history.

Related Topics:
	|netrw-gb| how to return (go) to a bookmark
	|netrw-mb| how to make a bookmark
	|netrw-mB| how to delete bookmarks
	|netrw-u|  change to a predecessor directory via the history stack
	|netrw-U|  change to a successor   directory via the history stack

MAKING A NEW DIRECTORY					*netrw-d* {{{2

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.

Currently, making a directory via ftp is not supported.

Associated setting variable: |g:netrw_local_mkdir| |g:netrw_mkdir_cmd|


MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* {{{2

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.

Associated setting variable: |g:netrw_keepdir|

MARKING FILES							*netrw-mf* {{{2
	(also see |netrw-mr|)

One may mark files with the cursor atop a filename and then pressing "mf".
With gvim, one may also mark files with <s-leftmouse>.  The following netrw
maps make use of marked files:

    |netrw-a|	Hide marked files/directories
    |netrw-D|	Delete marked files/directories
    |netrw-mc|	Copy marked files to target
    |netrw-md|	Apply vimdiff to marked files
    |netrw-me|	Edit marked files
    |netrw-mg|	Apply vimgrep to marked files
    |netrw-mm|	Move marked files
    |netrw-mp|	Print marked files
    |netrw-mt|	Set target for |netrw-mm| and |netrw-mc|
    |netrw-mT|	Generate tags using marked files
    |netrw-mx|	Apply shell command to marked files
    |netrw-mz|	Compress/Decompress marked files
    |netrw-O|	Obtain marked files
    |netrw-R|	Rename marked files

One may unmark files one at a time the same way one marks them; ie. place
the cursor atop a marked file and press "mf".  This process also works
with <s-leftmouse> using gvim.  One may unmark all files by pressing
"mu" (see |netrw-mu|).

*markfilelist* *global_markfilelist* *local_markfilelist*
All marked files are entered onto the global marked file list; there is only
one such list.  In addition, every netrw buffer also has its own local marked
file list; since netrw buffers are associated with specific directories, this
means that each directory has its own local marked file list.  The various
commands which operate on marked files use one or the other of the marked file
lists.


MARKING FILES BY REGULAR EXPRESSION				*netrw-mr* {{{2
	(also see |netrw-mf|)

One may also mark files by pressing "mr"; netrw will then issue a prompt,
"Enter regexp: ".  You may then enter a shell-style regular expression such
as *.c$ (see |glob()|).  For remote systems, glob() doesn't work -- so netrw
converts "*" into ".*" (see |regexp|) and marks files based on that.  In the
future I may make it possible to use |regexp|s instead of glob()-style
expressions (yet-another-option).


MARKED FILES: ARBITRARY COMMAND				*netrw-mx* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the local marked-file list)

Upon activation of the "mx" map, netrw will query the user for some (external)
command to be applied to all marked files.  All "%"s in the command will be
substituted with the name of each marked file in turn.  If no "%"s are in the
command, then the command will be followed by a space and a marked filename.


MARKED FILES: COMPRESSION AND DECOMPRESSION		*netrw-mz* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the local marked file list)

If any marked files are compressed,   then "mz" will decompress them.
If any marked files are decompressed, then "mz" will compress them
using the command specified by |g:netrw_compress|; by default,
that's "gzip".

For decompression, netrw provides a |Dictionary| of suffices and their
associated decompressing utilities; see |g:netrw_decompress|.

Associated setting variables: |g:netrw_compress| |g:netrw_decompress|

MARKED FILES: COPYING						*netrw-mc* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (Uses the global marked file list)

Select a target directory with mt (|netrw-mt|).  Then change directory,
select file(s) (see |netrw-mf|), and press "mc".

Associated setting variable: |g:netrw_localcopycmd| |g:netrw_ssh_cmd|

MARKED FILES: DIFF						*netrw-md* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the global marked file list)

Use |vimdiff| to visualize difference between selected files (two or
three may be selected for this).  Uses the global marked file list.

MARKED FILES: EDITING						*netrw-me* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the global marked file list)

This command will place the marked files on the |arglist| and commence
editing them.  One may return the to explorer window with |:Rexplore|.

MARKED FILES: GREP						*netrw-mg* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the global marked file list)

This command will apply |:vimgrep| to the marked files.  The command will ask
for the requested pattern; one may enter: >
	/pattern/[g][j]
	! /pattern/[g][j]
	pattern
<
MARKED FILES: HIDING AND UNHIDING BY SUFFIX			*netrw-mh* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the local marked file list)

This command extracts the suffices of the marked files and toggles their
presence on the hiding list.  Please note that marking the same suffix
this way multiple times will result in the suffix's presence being toggled
for each file (so an even quantity of marked files having the same suffix
is the same as not having bothered to select them at all).

Related topics: |netrw-a| |g:netrw_list_hide|

MARKED FILES: MOVING						*netrw-mm* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the global marked file list)

	WARNING: moving files is more dangerous than copying them.
	A file being moved is first copied and then deleted; if the
	copy operation fails and the delete succeeds, you will lose
	the file.  Either try things out with unimportant files
	first or do the copy and then delete yourself using mc and D.
	Use at your own risk!

Select a target directory with mt (|netrw-mt|).  Then change directory,
select file(s) (see |netrw-mf|), and press "mm".

Associated setting variable: |g:netrw_localmovecmd| |g:netrw_ssh_cmd|

MARKED FILES: PRINTING						*netrw-mp* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the local marked file list)

Netrw will apply the |:hardcopy| command to marked files.  What it does
is open each file in a one-line window, execute hardcopy, then close the
one-line window.


MARKED FILES: SOURCING						*netrw-ms* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the local marked file list)

Netrw will source the marked files (using vim's |:source| command)


MARKED FILES: TAGGING						*netrw-mT* {{{2
	    (See |netrw-mf| and |netrw-mr| for how to mark files)
		      (uses the global marked file list)

The "mT" mapping will apply the command in |g:netrw_ctags| (by default, it is
"ctags") to marked files.  For remote browsing, in order to create a tags file
netrw will use ssh (see |g:netrw_ssh_cmd|), and so ssh must be available for
this to work on remote systems.  For your local system, see |ctags| on how to
get a version.  I myself use hdrtags, currently available at
http://mysite.verizon.net/astronaut/src/index.html , and have >

	let g:netrw_ctags= "hdrtag"
<
in my <.vimrc>.

When a remote set of files are tagged, the resulting tags file is "obtained";
ie. a copy is transferred to the local system's directory.  The local tags
file is then modified so that one may use it through the network.  The
modification is concerns the names of the files in the tags; each filename is
preceded by the netrw-compatible url used to obtain it.  When one subsequently
uses one of the go to tag actions (|tags|), the url will be used by netrw to
edit the desired file and go to the tag.

Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|


MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
     (See |netrw-mf| and |netrw-mr| for how to mark files)

Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):

  * if the cursor is atop a file name, then the netrw window's currently
    displayed directory is used for the copy/move-to target.

  * also, if the cursor is in the banner, then the netrw window's currently
    displayed directory is used for the copy/move-to target.

  * however, if the cursor is atop a directory name, then that directory is
    used for the copy/move-to target

There is only one copy/move-to target per vim session; ie. the target is a
script variable (see |s:var|) and is shared between all netrw windows (in an
instance of vim).

MARKED FILES: UNMARKING						*netrw-mu* {{{2
     (See |netrw-mf| and |netrw-mr| for how to mark files)

The "mu" mapping will unmark all currently marked files.


NETRW BROWSER VARIABLES		*netrw-browser-options* *netrw-browser-var* {{{2

(if you're interested in the netrw file transfer settings, see |netrw-options|)

The <netrw.vim> browser provides settings in the form of variables which
you may modify; by placing these settings in your <.vimrc>, you may customize
your browsing preferences.  (see also: |netrw-settings|)
>
   ---				-----------
   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_banner*		enable/suppress the banner
				=0: suppress the banner
				=1: banner is enabled (default)
				NOTE: suppressing the banner is a new feature
				which may cause problems.

  *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
				=4: act like "P" (ie. open previous window)
				    Note that |g:netrw_preview| may be used
				    to get vertical splitting instead of
				    horizontal splitting.

  *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_chgperm*		Unix/Linux: "chmod PERM FILENAME"
				Windows:    "cacls FILENAME /e /p PERM"
				Used to change access permission for a file.

  *g:netrw_compress*		="gzip"
				    Will compress marked files with this
				    command

  *g:netrw_ctags*		="ctags"
				The default external program used to create tags

  *g:netrw_cursorline*		= 1 (default)
				will use the |'cursorline'| local setting when
				|g:netrw_liststyle| ==0 (thin listing) or
				|g:netrw_liststyle| ==1 (long listing) or
				|g:netrw_liststyle| ==3 (tree listing)
				(ie. doesn't affect the wide listing)
				=0: off
				=2: like ==1, but the wide listing gets both
				cursorline and |'cursorcolumn'|locally set

  *g:netrw_decompress*		= { ".gz" : "gunzip" ,
				    ".bz2" : "bunzip2" ,
				    ".zip" : "unzip" ,
				    ".tar" : "tar -xf"}
				  A dictionary mapping suffices to
				  decompression programs.

  *g:netrw_fastbrowse*		=0: slow speed directory browsing;
				    never re-uses directory listings,
				    always obtains directory listings.
				=1: medium speed directory browsing;
				    re-use directory listings only
				    when remote directory browsing.
				    (default value)
				=2: fast directory 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 user the choice of
				trading off accuracy (ie. up-to-date listing)
				versus speed.

  *g:netrw_fname_escape*	=' ?&;%'
				Used on filenames before remote reading/writing

  *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_glob_escape*		='[]*?`{~$'  (unix)
				='[]*?`{$'  (windows
				These characters in directory names are
				escaped before applying glob()

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

  *g:netrw_home*		The home directory for where bookmarks and
				history are saved (as .netrwbook and
				.netrwhist).
				 default: the first directory on the
				         |'runtimepath'|

  *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
				Patterns are regular expressions (see |regexp|)
				Example: let g:netrw_list_hide= '.*\.swp$'
				 default: ""

  *g:netrw_localcopycmd*	="cp" Linux/Unix/MacOS/Cygwin
				="copy" Windows
				Copies marked files (|netrw-mf|) to target
				directory (|netrw-mt|, |netrw-mc|)

  *g:netrw_localmovecmd*	="mv" Linux/Unix/MacOS/Cygwin
				="move" Windows
				Moves marked files (|netrw-mf|) to target
				directory (|netrw-mt|, |netrw-mm|)

  *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_mousemaps*		=1 (default) enables the mouse buttons
				   while browsing:
				     leftmouse       : open file/directory
				     shift-leftmouse : mark file
				     middlemouse     : same as P
				     rightmouse      : remove file/directory
				=0: disables mouse maps

  *g:netrw_retmap*		if it exists and is set to one, then:
				 * if in a netrw-selected file, AND
				 * no normal-mode <2-leftmouse> mapping exists,
				then the <2-leftmouse> will be mapped for easy
				return to the netrw browser window.
				 example: click once to select and open a file,
				          double-click to return.

				Note that one may instead choose to:
				 * let g:netrw_retmap= 1, AND
				 * nmap <silent> YourChoice <Plug>NetrwReturn
				and have another mapping instead of
				<2-leftmouse> to invoke the return.

				You may also use the |:Rexplore| command to do
				the same thing.

				  default: =0

  *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_options*	sorting is done using |:sort|; this
				variable's value is appended to the
				sort command.  Thus one may ignore case,
				for example, with the following in your
				.vimrc: >
					let g:netrw_sort_options="i"
<				 default: ""

  *g:netrw_sort_sequence*	when sorting by name, first sort by the
				comma-separated pattern sequence.  Note that
				the filigree added to indicate filetypes
				should be accounted for in your pattern.
				 default: '[\/]$,*,\.bak$,\.o$,\.h$,
				           \.info$,\.swp$,\.obj$'

  *g:netrw_special_syntax*	If true, then certain files will be shown
				in special syntax in the browser:

					netrwBak     : *.bak
					netrwCompress: *.gz *.bz2 *.Z *.zip
					netrwData    : *.dat
					netrwHdr     : *.h
					netrwLib     : *.a *.so *.lib *.dll
					netrwMakefile: [mM]akefile *.mak
					netrwObj     : *.o *.obj
					netrwTags    : tags ANmenu ANtags
					netrwTilde   : *~ 
					netrwTmp     : tmp* *tmp

				These syntax highlighting groups are linked
				to Folded or DiffChange by default
				(see |hl-Folded| and |hl-DiffChange|), but
				one may put lines like >
					hi link netrwCompress Visual
<				into one's <.vimrc> to use one's own
				preferences.

  *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_tmpfile_escape*	=' &;'
				escape() is applied to all temporary files
				to escape these characters.

  *g:netrw_timefmt*		specify format string to vim's strftime().
				The default, "%c", is "the preferred date
				and time representation for the current
				locale" according to my manpage entry for
				strftime(); however, not all are satisfied
				with it.  Some alternatives:
				 "%a %d %b %Y %T",
				 " %a %Y-%m-%d  %I-%M-%S %p"
				 default: "%c"

  *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_winsize*		specify initial size of new windows made with
				"o" (see |netrw-o|), "v" (see |netrw-v|),
				|:Hexplore| or |:Vexplore|.
				 default: ""

  *g:netrw_xstrlen*		Controls how netrw computes string lengths,
				including multi-byte characters' string
				length. (thanks to N Weibull, T Mechelynck)
				=0: uses Vim's built-in strlen()
				=1: number of codepoints (Latin a + combining
				    circumflex is two codepoints)  (DEFAULT)
				=2: number of spacing codepoints (Latin a +
				    combining circumflex is one spacing
				    codepoint; a hard tab is one; wide and
				    narrow CJK are one each; etc.)
				=3: virtual length (counting tabs as anything
				    between 1 and |'tabstop'|, wide CJK as 2
				    rather than 1, Arabic alif as zero when
				    immediately preceded by lam, one
				    otherwise, etc)

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

NETRW BROWSING AND OPTION INCOMPATIBILITIES	*netrw-incompatible* {{{2

Netrw has been designed to handle user options by saving them, setting the
options to something that's compatible with netrw's needs, and then restoring
them.  However, the autochdir option: >
	:set acd
is problematical.  Autochdir sets the current directory to that containing the
file you edit; this apparently also applies to directories.  In other words,
autochdir sets the current directory to that containing the "file" (even if
that "file" is itself a directory).

NETRW SETTINGS						*netrw-settings* {{{2

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-browser-var| |netrw-protocol| |netrw-var| |netrw-variables|)


==============================================================================
OBTAINING A FILE					*netrw-O* {{{2

If there are no marked files:

    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.

If there are marked files:

    The marked files will be obtained (ie. a copy will be transferred to your
    local machine, but not set up for editing).

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


OPEN A NEW FILE IN NETRW'S CURRENT DIRECTORY		*netrw-%*

To open a file in netrw's current directory, press "%".  This map will
query the user for a new filename; an empty file by that name will be
placed in the netrw's current directory (ie. b:netrw_curdir).


PREVIEW WINDOW				*netrw-p* *netrw-preview* {{{2

One may use a preview window by using the "p" key when the cursor is atop the
desired filename to be previewed.  The display will then split to show both
the browser (where the cursor will remain) and the file (see |:pedit|).
By default, the split will be taken horizontally; one may use vertical
splitting if one has set |g:netrw_preview| first.

An interesting set of netrw settings is: >

	let g:netrw_preview   = 1
	let g:netrw_liststyle = 3
	let g:netrw_winsize   = 30

These will:
	1. Make vertical splitting the default for previewing files
	2. Make the default listing style "tree"
	3. When a vertical preview window is opened, the directory listing
	   will use only 30 columns; the rest of the window is used for the
	   preview window.

PREVIOUS WINDOW				*netrw-P* *netrw-prvwin* {{{2

To edit a file or directory in the previously used (last accessed) 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).


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

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


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

If there are no marked files: (see |netrw-mf|)

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

If there are marked files:  (see |netrw-mf|)

    Marked files will be renamed (moved).  You will be queried as above in
    order to specify where you want the file/directory to be moved.

    WARNING:~

    Note that moving files is a dangerous operation; copies are safer.  That's
    because a "move" for remote files is actually a copy + delete -- and if
    the copy fails and the delete does not, you may lose the file.

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


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

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

Related topics:              |netrw-s|
Associated setting variable: |g:netrw_sort_direction|


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

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.

Related topics:               |netrw-r| |netrw-S|
Associated setting variables: |g:netrw_sort_by| |g:netrw_sort_sequence|


SETTING EDITING WINDOW					*netrw-C* {{{2

One may select a netrw window for editing with the "C" mapping, or by setting
g:netrw_chgwin to the selected window number.  Subsequent selection of a file
to edit (|netrw-cr|) will use that window.

Related topics:			|netrw-cr|
Associated setting variables:	|g:netrw_chgwin|


10. Problems and Fixes					*netrw-problems* {{{1

	(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 thin 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.

		Put the following statement into your |.vimrc|: >

			let g:netrw_liststyle= 1
<
		Check out |netrw-browser-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?

	    Put the following line in your |.vimrc|:
>
		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 it's a tag)
			- Make sure it's at the top of the listbox (click it,
			  then click "Up" if it's 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.chiark.greenend.org.uk/~sgtatham/putty/0.60/htmldoc/Chapter8.html#pubkey-gettingready
			(8.3 Getting ready for public key authentication)
<
		How to use a private key with 'pscp': >

  http://www.chiark.greenend.org.uk/~sgtatham/putty/0.60/htmldoc/Chapter5.html
			(5.2.4 Using public key authentication with PSCP)
<
		(Ben Schmidt) I find the ssh included with cwRsync is
		brilliant, and install cwRsync or cwRsyncServer on most
		Windows systems I come across these days. I guess COPSSH,
		packed by the same person, is probably even better for use as
		just ssh on Windows, and probably includes sftp, etc. which I
		suspect the cwRsync doesn't, though it might

		(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
<
								*netrw-p10*
	P10. I'm being pestered with "[something] is a directory" and
	     "Press ENTER or type command to continue" prompts...

		The "[something] is a directory" prompt is issued by Vim,
		not by netrw, and there appears to be no way to work around
		it.  Coupled with the default cmdheight of 1, this message
		causes the "Press ENTER..." prompt.  So:  read |hit-enter|;
		I also suggest that you set your |'cmdheight'| to 2 (or more) in
		your <.vimrc> file.

								*netrw-p11*
	P11. I want to have two windows; a thin one on the left and my editing
	     window on the right.  How can I do this?

		* Put the following line in your <.vimrc>:
			let g:netrw_altv = 1
		* Edit the current directory:  :e .
		* Select some file, press v
		* Resize the windows as you wish (see |CTRL-W_<| and
		  |CTRL-W_>|).  If you're using gvim, you can drag
		  the separating bar with your mouse.
		* When you want a new file, use  ctrl-w h  to go back to the
		  netrw browser, select a file, then press P  (see |CTRL-W_h|
		  and |netrw-P|).  If you're using gvim, you can press
		  <leftmouse> in the browser window and then press the
		  <middlemouse> to select the file.

								*netrw-p12*
	P12. My directory isn't sorting correctly, or unwanted letters are
	     appearing in the listed filenames, or things aren't lining
	     up properly in the wide listing, ...

	     This may be due to an encoding problem.  I myself usually use
	     utf-8, but really only use ascii (ie. bytes from 32-126).
	     Multibyte encodings use two (or more) bytes per character.
	     You may need to change |g:netrw_sepchr| and/or |g:netrw_xstrlen|.

								*netrw-p13*
	P13. I'm a Windows + putty + ssh user, and when I attempt to browse,
	     the directories are missing trailing "/"s so netrw treats them
	     as file transfers instead of as attempts to browse
	     subdirectories.  How may I fix this?

	     (mikeyao) If you want to use vim via ssh and putty under Windows,
	     try combining the use of pscp/psftp with plink.  pscp/psftp will
	     be used to connect and plink will be used to execute commands on
	     the server, for example: list files and directory using 'ls'.

	     These are the settings I use to do this:
>
	    " list files, it's the key setting, if you haven't set,
	    " you will get a blank buffer
	    let g:netrw_list_cmd = "plink HOSTNAME ls -Fa"
	    " if you haven't add putty directory in system path, you should
	    " specify scp/sftp command.  For examples:
	    "let g:netrw_sftp_cmd = "d:\\dev\\putty\\PSFTP.exe"
	    "let g:netrw_scp_cmd = "d:\\dev\\putty\\PSCP.exe"
<


==============================================================================
11. Debugging Netrw Itself				*netrw-debug* {{{1

The <netrw.vim> script is typically available as:
>
	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
	/usr/local/share/vim/vim6x/autoload/netrw.vim
< -or- >
	/usr/local/share/vim/vim7x/plugin/netrwPlugin.vim
	/usr/local/share/vim/vim7x/autoload/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#DECHO
	   or
	     http://vim.sourceforge.net/scripts/script.php?script_id=120

	  It now comes as a "vimball"; if you're using vim 7.0 or earlier,
	  you'll need to update vimball, too.  See
	     http://mysite.verizon.net/astronaut/vim/index.html#VIMBALL

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

		vim netrw.vim
		:DechoOn
		:wq
<
	   To restore to normal non-debugging behavior, re-edit <netrw.vim>
	   and type >

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

	3. Then bring up vim and attempt to evoke the problem by doing a
	   transfer or doing some browsing.  A set of messages should appear
	   concerning the steps that <netrw.vim> took in attempting to
	   read/write your file over the network in a separate tab.

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

	v140: Jul 27, 2010 * (Lech Lorens) unexpected change of window
	v139: May 14, 2010 * when viewing remote directory listings and
			     changing listing style, going to tree listing
			     mode was issuing two rather useless messages
			     about the buffer name.  They have now been
			     silenced.
			   * (Jean Johner) with "behave mswin", clicking
			     on a filename in wide mode opened a new file
			     with a missing first letter
			   * (Britton Kerin) wanted netrw listings to be
			     buflisted; the |g:netrw_bufsettings| option
			     permits that.
	      Jun 18, 2010 * (Jan Steffens) added support for xz compression
	      Jun 23, 2010 * vimdiff dir1 dir2 now works
	      Jul 27, 2010 * (John Orr) pointed out that the intended maparg
			     test for gx was actually testing for g rather
			     than gx.  Fixed.
	v138: May 01, 2010 * added the bomb setting to the Save-Set-Restore
			     option handling (for Tony M)
	      May 14, 2010 * (Bram Moolenaar) netrw optionally sets cursorline
			     (and sometimes cursorcolumn) for its display.
			     This option setting was leaking through with
			     remote file handling.
	v137: Dec 28, 2009 * modified the preview window handling for
			     vertically split windows.  The preview
			     window will take up all but g:netrw_winsize
			     columns of the original window; those 
			     g:netrw_winsize columns will be used for
			     the netrw listing.
			   * (Simon Dambe) removed "~" from
			     |g:netrw_glob_escape| under Windows
			   * (Bram Moolenaar) modified test for status bar
			     click with leftmouse.  Moved code to
			     s:NetrwLeftmouse().
	      Feb 24, 2010 * (for Jean Johner) added insert-mode maps; one
			     can get into insert mode with netrw via
			     ctrl-o :e .
	      Mar 15, 2010 * (Dominique Pellé) Directory with backslashes such
			     as foo\bar were not being entered/left properly
	      Mar 15, 2010 * Using :Explore .. and causing two FocusGained
			     events caused the directory to change.  Fixed.
	      Mar 22, 2010 * Last fix caused problems for *//pat and */filepat
			     searches.
	      Mar 30, 2010 * With :set hidden and changing listing styles 8
			     times, the tree listing buffer was being marked
			     as modified upon exit.  Fixed.
	v136: Jan 14, 2009 * extended |g:Netrw_funcref| to also handle lists
			     of function references
	      Jan 14, 2009 * (reported by Marvin Renich) with spell check
			     enabled, some filenamess will still being
			     displayed as spelling errors.
	      Apr 13, 2009 * (Björn Winckler) writing a file using
	                     remote scp caused syntax highlighting problem.
			     Solution: avoid syntax/syntax.vim's
			     au Filetype * syntax setting autocommand by
			     checking that the current buffer has the
			     netrw filetype before attempting a doau
			     in s:NetrwSafeOptions().
	      Apr 14, 2009 * (asgeo1) suggested the "T" map (|netrw-T|)
	      Apr 14, 2009 * marking wasn't working on executable and
			     other special filenames
	      Apr 20, 2009 * (Dennis Benzinger) files opened via http have
			     their syntax filetype auto-detected
	      Jun 19, 2009 * (Yukihiro Nakadaira) help document improvements
	      Jul 22, 2009 * g:netrw_browse_split will honor the
			     |'equalalways'| setting.
	      Jul 29, 2009 * implemented "I" mapping to toggle banner
			     (this is experimental and still being debugged)
	      Sep 19, 2009 * (Mike McEwan) writes via ftp now send both
			     g:netrw_ftpmode and g:netrw_ftpextracmd (if the
			     latter exists)
	      Dec 02, 2009 * netrw uses vimgrep several places; it now uses
			     "noautocmd vimgrep" (should be speedier).
	      Dec 03, 2009 * changed back to using -source instead of -dump
			     for elinks-using commands. (requested by James
			     Vega and Karsten Hopp)
	v135: Oct 29, 2008 * using |simplify()| on directory names
			     (supporting handling ".."s in directory names)
	      Oct 31, 2008 * added special file highlighting for core dumps
			     under Unix/Linux.  The default sorting sequence
			     now also gives core dumps priority.
	      Nov 10, 2008 * uses a call to netrw#Nread() instead of Nread
			     to avoid having to use fnameescape()
			   * fixed a tree redrawing problem (open directory,
			     open subdir, close subdir, close dir)
	      Nov 19, 2008 * sprinkled some histdel("/",-1)s through the code
			     in an attempt to prevent netrw from changing
			     the search history.
	      Jan 02, 2009 * |g:Netrw_funcref| included
	      Jan 05, 2009 * Explore */ **/ *// **// all clear explorer
			     variables
	      Jan 05, 2009 * (Panagiotis Louridas) extended s:WinPath()
			     to remove cygdrive from non-cygwin Windows
			     paths.  Improved the determination as to
			     whether or not to do so.
	      Jan 13, 2009 * included contains=@NoSpell in every syntax
			     group for syntax/netrw.vim .
	v134: Sep 30, 2008 * (Sander Marechal) provided a bugfix involving
			     the use of the |netrw-t| command with a remote
			     directory.
	      Sep 30, 2008 * using "x" on a remote jpg was failing; fixed.
	      Oct 03, 2008 * bookmarks now go on a list and are stored to
			     the first directory on the |'runtimepath'| in
			     the hopes of making their retention reliable.
			     History now also goes to that directory.
	      Oct 07, 2008 * Included check that vim 7.0 or later is in use.
	      Oct 07, 2008 * Improved |g:netrw_retmap| handling.
	      Oct 12, 2008 * Based upon Sébastien Migniot's suggestion, if
			     cadaver isn't available then netrw will try to
			     use curl for the dav://... protocol.
	      Oct 13, 2008 * added @*/ to netrw buffers' |'iskeyword'|setting
			     This lets mf (|netrw-mf|) mark directories, links
			     and executables.
	      Oct 13, 2008 * avoids a second NetrwBrowse() refresh when
			     g:netrw_fastbrowse is <= 1 (slow, medium speed)
	      Oct 22, 2008 * |g:netrw_http_xcmd| may now be overridden
			     independently of |g:netrw_http_cmd|.
	      Oct 23, 2008 * [N] added to the various Explore commands to
			     let users specify the width/height of new
			     explorer windows, overriding |g:netrw_winsize|.
	v133: Aug 10, 2008 * NetReadFixup() for win95 was missing some "a:"s
	      Aug 12, 2008 * (Jan Minář) an error condition in NetrwMethod()
			     wasn't being used, resulting in "b:netrw_fname
			     undefined" errors
	      Aug 12, 2008 * (François Ingeirest) asked that "hi link" be
			     changed to hi default link in the netrw syntax
			     files.
	      Aug 12, 2008 * using s:NetrwUnmarkList() more often.  Filenames
			     were being left on the global list when removed
			     from the buffer-local lists.
	      Aug 14, 2008 * (Joshua Clayton) an errant extra ")" was left in
			     the rcp-handling portion of NetRead().
	      Sep 03, 2008 * added |'cursorline'| highlighting to thin, long,
			     and tree displays.
	v132: Aug 06, 2008 * Fixed marked file-based obtain
	      Aug 08, 2008 * sourcing a file via ftp from a netrw-generated
	                     buffer (or any buffer with |'nobl'|) left an
			     empty no-name buffer in its wake.  Fixed.
	v130: Jul 31, 2008 * trying out elinks/links for http://host/
			     requests.  One problem: in-page links
			     (such as with ...#LABEL) are not supported
			   * verified that Bram's modified netrwPlugin works
	      Aug 01, 2008 * fixed a bug: when sourcing a file via ftp, the
			     "filter window" was left behind.
	v129: Jul 31, 2008 * bug found in non-mouse enabled vim and some
			     local maps
	v128: Jul 30, 2008 * much work done in using shellescape() and
			     fnameescape()
	v126: Jun 30, 2008 * after having gone to a remote directory,
	                     <f1> was no longer taking one to the correct
			     entry in the help (|netrw-quickhelp|).  Fixed.
	      Jul 01, 2008 * extracting the last filename from a wide listing
			     missed the last letter when |'virtualedit'| not
			     enabled.
	      Jul 01, 2008 * vim foo/bar  was creating [Scratch] buffers,
			     where bar was also a directory
	      Jul 01, 2008 * numerous additional changes were made to netrw
			     to use fnameescape() and shellescape() instead
			     of escape().  Not all changes have been tested
			     as yet...
	      Jul 01, 2008 * (James Vega reported) some problems with
			     :NetrwSettings (due to no longer used setting
			     variables).
	      Jul 07, 2008 * Additional numerous changes to support security;
	                     shellescape(arg,1), etc.
	v125: Apr 07, 2008 * (Cristian Rigamonti) CR provides a patch; he
			     noted that gx was failing since its call to
			     netrw#NetBrowseX() wasn't updated to
			     netrw#NetrwBrowseX().
			   * (Stanis Trendelenburg) ST provides a patch to
			     supports davs: (dav + ssl)
			   * (Rick Choi) noted that directory names comprised
			     of three digits were not being displayed by
			     the internal browser.  Fixed.
			   * (Erik Falor) provided a patch to handle problems
			     with changing directory and |'acd'| option.
			   * (James Vega, Teemu Likonen) noted that netrw
			     wasn't handling multi-byte filenames/directories
			     correctly.  Fixed.
			   * (Rick) found problem with g:netrw_maxfilenamelen
			     being overridden.
			   * (James Vega) pointed out that netrw was
			     misidentifying all files in a symbolically linked
			     directory as being symbolically linked
			     themselves.  This particular problem was fixed;
			     however, there are now situations where
			     symbolically linked files will not be detected.
			     Really need an internal vim function to do this
			     identification.
	      Apr 17, 2008 * When g:netrw_keepdir==0, current directory
	                     doesn't necessarily equal b:netrw_curdir
			     initially.  Problem is due to the patch directly
			     above.
			   * Fixed qf to handle case where b:netrw_curdir
			     isn't the same as the current directory under
			     linux/macosx.
			   * New: |netrw-mg| (apply vimgrep to marked files)
	      May 05, 2008 * (Rick) pointed out that a "setlocal ts=32" was
			     interfering with g:netrw_maxfilenamelen
	      May 05, 2008 * (James Vega) a file inside a linked directory
			     was showing up as a symbolic link itself.
	      May 22, 2008 * symbolic links, fifos, and sockets are now
	                     indicated by a trailing @, |, or =, respectively.
	      Jun 06, 2008 * Removed numerous bugs from the marked file
			     move and copy.  Tested these changes under
			     Unix only thus far.
			   * :Rexplore returns to the screen position in the
			     netrw listing from whence the file was edited
	v124: Apr 02, 2008 * (Adrian Rollett) change the line supporting the
			    "x" action for mac to use g:netrw_shq
	v123: Feb 27, 2008 * Marked files now keeps a "global" marked file
			     list.  The global marked file list is used to
			     support tag processing and vimdiff'ing
			     (|netrw-md| |netrw-mt|)
			   * Been insuring that mm and mc works with various
			     combinations of local and remote directories
			   * (Stefan Bittner) http://.../ should always have
			     filetype "html" -- fixed.
			   * (Stefan Bittner) a "?" in a http://.../ request
			     wasn't being handled correctly.  Fixed by
			     removing ? from default |g:netrw_tmpfile_escape|.
			   * (Nico Weber) % codes in http://.../ requests
			     weren't being handled correctly.  Fixed by
			     including % in default |g:netrw_fname_escape|.
			   * (Stefan Bittner) attempts to update Buffers.Refresh
			     were failing because locale use changed the menu
			     names.  I implemented a workaround.
	v122: Feb 12, 2008 * bugfix - first sorting sequence match now has
			     priority
	      Feb 14, 2008 * bugfix - sorting sequence was effectively ignoring
			     sequencing priority of anything following '*'
			   * toggling a marked file was showing incorrect list
			     (list was correct, but displayed matches weren't)
			   * |g:netrw_special_syntax| implemented
	v121: Feb 11, 2008 * Bram M reported that :e file ... :e . would not
			     retain the alternate file.  Fixed -- I hope!
			   * bugfix -- apparently v120 broke an explicit
			     :Explore dirname
	v120: Jan 21, 2008 * |netrw-mt| changed to allow for target selection
	                     based on whether or not word under cursor is a
			     directory or file, or if cursor is in banner
			     area.
			   * |netrw-mh| included (hiding by marked-file suffix)
			   * functions moved about a bit (improved
			     categorization)
			   * executable files now displayed with trailing (*)
			   * symbolically linked files now displayed with
			     trailing (@)
			   * Somewhen, s:NetrwMarkFileMove() got damaged.  It
			   * is now restored (missing an endif, for example).
			   * |netrw-mu| implemented (unmarking marked files)
			   * many bugs have been removed from the marked file
			     system (tnx to Mark S. for feedback)
			   * |netrw-ms| implemented (sourcing marked files)
			   * fixed use of P with tree listing style
			   * multiple tree listing now supported
			   * ./ suppressed
			   * changed q -> qb (query bookmarks)
			   * implemented |netrw-qf|
			   * Explore now has four special list-generation
			     modes: */filepat **/filepat
			           *//pattern **//pattern
			   * gh (|netrw-gh|) is a shortcut for toggling the
			     hiding of files and directories beginning with a
			     dot
	v119: Jan 10, 2008 * When g:netrw_keepdir is false,
			     NetrwOptionsRestore() had a problem
			     (Bill McCarthy)
	      Jan 11, 2008 * Netrw now shows symbolic links with a trailing
	                     "@" and special highlighting.
	      Jan 15, 2008 * Changed g:netrw_noretmap -> |g:netrw_retmap|.
	                     Changed: disabled by default at Bram's
			     preference.
	v118: Jan 02, 2008 * Fixed a problem with Windows;
			     :Explore c:/path/ would not work,
			     but :Explore c:/path would.
			   * Fixed a bug in s:NetrwOptionRestore() - lcd's
			     argument wasn't being properly escaped so it
			     wouldn't handle spaces in directory names.
			     (Gary Johnson)
	v117: Jan 02, 2008 * Fixed a problem with P; had to include
			     a b:netrw_curdir bypass (Bram Moolenaar)
	v116: Nov 27, 2007 * netrw#LocalBrowseCheck() has &ft=="netrw"
			     check to prevent doing a directory listing
			     (was getting unexpected directory refreshes
			     in the middle of some function calls)
			   * NetrwOptionRestore moved after e! filename
			     in order to retain user options for editing
			     in s:NetrwBrowseChgDir()
	      Dec 12, 2007 * Bug fix -- netrw does a better job of retaining
	                     user options when editing files under the aegis
			     of the browser
	v115: Oct 04, 2007 * Erik Remmelzwaal pointed out that the use of
			     shellslash in s:GetTempfile() was incorrect
	      Oct 11, 2007 * Tracked down and eliminated a bug with editing
			     remote *.tar.gz and *.tar.bz2 files
	      Oct 11, 2007 * g:netrw_localmovecmd wasn't being initialized
			     properly, and g:netrw_localcopycmd was being
			     overwritten.
	      Oct 12, 2007 * Placed all :Rexplore and <2-leftmouse> setup
			     in a new support function (s:SetRexDir()).
	      Oct 15, 2007 * new: g:netrw_browse_split == 4; means <cr>
			     based selection will use previous window
	      Oct 20, 2007 * also checks on |'shellxquote'| to set g:netrw_shq
	      Oct 24, 2007 * Explore handles path/**/filename
	      Oct 27, 2007 * sourcing remote files often didn't work with ftp,
	                     turns out that b:netrw_method was undefined, so
			     s:SaveBufVars and s:RestoreBufVars() fixed it.
	v114: Sep 28, 2007 * mT, the map that invokes tags, has been improved
			     to support use of remote tags files.
	      Oct 02, 2007 * changed Netrw menu to use more submenus
	v113: Sep 07, 2007 * worked out why the cursor position wasn't being
			     saved and restored as intended after doing such
			     things as deleting and renaming files.
	      Sep 11, 2007 * Fixed bug which effectively disabled <c-l> and
			     <c-h> maps
	      Sep 18, 2007 * there used to be one NetrwOptionRestore() call at
			     the end of the s:NetrwBrowseChgDir() function;
			     they're now at the end of every if..elseif..else
			     block.  The edit-a-file one is not quite at the end
			     of its block; instead, it's just before the edit.
			     Restores user options, then this new placement
			     allows ftplugins, autocmds, etc to change settings
			     (ex. ftplugin/cpp.vim sets cindent).
	      Sep 19, 2007 * changed all strlen() calls to use s:Strlen(), a
			     function which handles utf-8 wide characters
			     correctly.
	      Sep 20, 2007 * (Nico Weber) the "x" command has been extended
			     to Mac's OS/X (macunix); it now uses open to
			     handle |netrw-x| browsing with special files.
	      Sep 22, 2007 * Added g:netrw_noretmap to netrw at Tony M's
			     request.
			   * Included path to NetrwRemoteRmFile()
	v112: Aug 18, 2007 * added mx (|netrw-mx|) for executing arbitrary
			     commands on marked files
	      Aug 22, 2007 * more option save/restore work for
			     s:NetrwBrowseChgDir(); s:NetrwOptionSave()
			     and s:NetrwOptionRestore() now take a parameter
			     specifying the type of variables to be used for
			     saving and restoring (either "w:" or "s:")
	      Sep 04, 2007 * added the :NetrwClean[!] command
	v111: Jul 25, 2007 * using Windows but not using Cygwin, netrw does a
			     "file bufname" where the bufname uses /s
			     instead of \s; Vim "fixes" it by changing the
			     bufname to use \s anyway.  This meant that
			     NetrwGetBuffer() didn't find the appropriately
			     named buffer, and so would generate a new
			     buffer listing; hence the cursor would appear
			     to have been moved when doing a preview.
			   * added <2-leftmouse> map to return to netrw's
			     browser display
	      Aug 16, 2007 * added the mark-file system, including
			     maps for mf mp mt mz and mu.  Modifications
			     made to maps for a D O and R to support
			     marked files.
	v110: May 10, 2007 * added [ and ] maps to NetrwTreeListing
	      May 25, 2007 * |g:netrw_preview| included
	      May 29, 2007 * modified netrw#NetBrowseX to consistently use
			     g:netrw_shq instead of hardcoded quotes,
			     and modified the snippet that sets up redir
			     so Windows machines use "nul" instead of
			     "/dev/null".
	      Jun 01, 2007 * fixed bug -- NetGetBuffer() wasn't always
			     recognizing a buffer name match when it should,
			     thus resulting in [Scratch] buffers.
	      Jun 04, 2007 * Gary Johnson found a bugfix for the "c" mapping
			     when the directory is to be made current but
			     the name contains spaces.
	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 was 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 given by
			     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.
			   * 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 cmd
			   * 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 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 itself 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 (needs 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
			     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 cmd.
			   * 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 uses 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 it's
			     "!" 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, which
			     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 browsing.
	v46:		   * now handles remote 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


==============================================================================
13. Todo						*netrw-todo* {{{1

07/29/09 : banner	:|g:netrw_banner| can be used to suppress the
	   suppression	  banner.  This feature is new and experimental,
			  so its in the process of being debugged.
09/04/09 : "gp"		: See if it can be made to work for remote systems.
			: See if it can be made to work with marked files.

==============================================================================
14. 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

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