diff --git a/runtime/macros/README.txt b/runtime/macros/README.txt
index 0163546..22f9a97 100644
--- a/runtime/macros/README.txt
+++ b/runtime/macros/README.txt
@@ -8,28 +8,26 @@
 urm	Macros that simulate a simple computer: "Universal Register Machine"
 
 
+
 The other files contain some handy utilities.  They also serve as examples for
 how to use Vi and Vim functionality.
 
 less.sh + less.vim	make Vim work like less (or more)
 
 
-This one is only for Unix.
-file_select.vim		macros that make a handy file selector
-
 
 The following have been moved to an optional package.  Add the command to your
 vimrc file to use the package:
 
-packadd! dvorak		Dvorak keyboard support; adds mappings
+packadd! dvorak		" Dvorak keyboard support; adds mappings
 
-packadd! editexisting	when editing a file that is already edited with
-			another Vim instance, go to that Vim instance
+packadd! editexisting	" when editing a file that is already edited with
+			" another Vim instance, go to that Vim instance
 
-packadd! justify	justifying text.
+packadd! justify	" justifying text.
 
-packadd! matchit	makes the % command work better
+packadd! matchit	" makes the % command work better
 
-packadd! shellmenu	menus for editing shell scripts in the GUI version
+packadd! shellmenu	" menus for editing shell scripts in the GUI version
 
-packadd! swapmouse	swap left and right mouse buttons
+packadd! swapmouse	" swap left and right mouse buttons
diff --git a/runtime/macros/editexisting.vim b/runtime/macros/editexisting.vim
index 3530e29..6e8f74f 100644
--- a/runtime/macros/editexisting.vim
+++ b/runtime/macros/editexisting.vim
@@ -1,119 +1,3 @@
-" Vim Plugin:	Edit the file with an existing Vim if possible
-" Maintainer:	Bram Moolenaar
-" Last Change:	2014 Dec 06
-
-" This is a plugin, drop it in your (Unix) ~/.vim/plugin or (Win32)
-" $VIM/vimfiles/plugin directory.  Or make a symbolic link, so that you
-" automatically use the latest version.
-
-" This plugin serves two purposes:
-" 1. On startup, if we were invoked with one file name argument and the file
-"    is not modified then try to find another Vim instance that is editing
-"    this file.  If there is one then bring it to the foreground and exit.
-" 2. When a file is edited and a swap file exists for it, try finding that
-"    other Vim and bring it to the foreground.  Requires Vim 7, because it
-"    uses the SwapExists autocommand event.
-if v:version < 700
-  finish
-endif
-
-" Function that finds the Vim instance that is editing "filename" and brings
-" it to the foreground.
-func s:EditElsewhere(filename)
-  let fname_esc = substitute(a:filename, "'", "''", "g")
-
-  let servers = serverlist()
-  while servers != ''
-    " Get next server name in "servername"; remove it from "servers".
-    let i = match(servers, "\n")
-    if i == -1
-      let servername = servers
-      let servers = ''
-    else
-      let servername = strpart(servers, 0, i)
-      let servers = strpart(servers, i + 1)
-    endif
-
-    " Skip ourselves.
-    if servername ==? v:servername
-      continue
-    endif
-
-    " Check if this server is editing our file.
-    if remote_expr(servername, "bufloaded('" . fname_esc . "')")
-      " Yes, bring it to the foreground.
-      if has("win32")
-	call remote_foreground(servername)
-      endif
-      call remote_expr(servername, "foreground()")
-
-      if remote_expr(servername, "exists('*EditExisting')")
-	" Make sure the file is visible in a window (not hidden).
-	" If v:swapcommand exists and is set, send it to the server.
-	if exists("v:swapcommand")
-	  let c = substitute(v:swapcommand, "'", "''", "g")
-	  call remote_expr(servername, "EditExisting('" . fname_esc . "', '" . c . "')")
-	else
-	  call remote_expr(servername, "EditExisting('" . fname_esc . "', '')")
-	endif
-      endif
-
-      if !(has('vim_starting') && has('gui_running') && has('gui_win32'))
-	" Tell the user what is happening.  Not when the GUI is starting
-	" though, it would result in a message box.
-	echomsg "File is being edited by " . servername
-	sleep 2
-      endif
-      return 'q'
-    endif
-  endwhile
-  return ''
-endfunc
-
-" When the plugin is loaded and there is one file name argument: Find another
-" Vim server that is editing this file right now.
-if argc() == 1 && !&modified
-  if s:EditElsewhere(expand("%:p")) == 'q'
-    quit
-  endif
-endif
-
-" Setup for handling the situation that an existing swap file is found.
-try
-  au! SwapExists * let v:swapchoice = s:EditElsewhere(expand("<afile>:p"))
-catch
-  " Without SwapExists we don't do anything for ":edit" commands
-endtry
-
-" Function used on the server to make the file visible and possibly execute a
-" command.
-func! EditExisting(fname, command)
-  " Get the window number of the file in the current tab page.
-  let winnr = bufwinnr(a:fname)
-  if winnr <= 0
-    " Not found, look in other tab pages.
-    let bufnr = bufnr(a:fname)
-    for i in range(tabpagenr('$'))
-      if index(tabpagebuflist(i + 1), bufnr) >= 0
-	" Make this tab page the current one and find the window number.
-	exe 'tabnext ' . (i + 1)
-	let winnr = bufwinnr(a:fname)
-	break
-      endif
-    endfor
-  endif
-
-  if winnr > 0
-    exe winnr . "wincmd w"
-  elseif exists('*fnameescape')
-    exe "split " . fnameescape(a:fname)
-  else
-    exe "split " . escape(a:fname, " \t\n*?[{`$\\%#'\"|!<")
-  endif
-
-  if a:command != ''
-    exe "normal! " . a:command
-  endif
-
-  redraw
-endfunc
+" Load the editexisting package.
+" For those users who were loading the editexisting plugin from here.
+packadd editexisting
