diff --git a/src/diff.c b/src/diff.c
index b6f936e..1a382e3 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1905,7 +1905,10 @@
     {
 	/* No argument: Find the other buffer in the list of diff buffers. */
 	for (idx_other = 0; idx_other < DB_COUNT; ++idx_other)
-	    if (diffbuf[idx_other] != curbuf && diffbuf[idx_other] != NULL)
+	    if (diffbuf[idx_other] != curbuf
+		    && diffbuf[idx_other] != NULL
+		    && (eap->cmdidx != CMD_diffput
+					       || diffbuf[idx_other]->b_p_ma))
 		break;
 	if (idx_other == DB_COUNT)
 	{
@@ -1915,7 +1918,9 @@
 
 	/* Check that there isn't a third buffer in the list */
 	for (i = idx_other + 1; i < DB_COUNT; ++i)
-	    if (diffbuf[i] != curbuf && diffbuf[i] != NULL)
+	    if (diffbuf[i] != curbuf
+		    && diffbuf[i] != NULL
+		    && (eap->cmdidx != CMD_diffput || diffbuf[i]->b_p_ma))
 	    {
 		EMSG(_("E101: More than two buffers in diff mode, don't know which one to use"));
 		return;
diff --git a/src/edit.c b/src/edit.c
index 5b72461..d9bfb2f 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -295,6 +295,7 @@
      */
     if (cmdchar != 'r' && cmdchar != 'v')
     {
+# ifdef FEAT_EVAL
 	if (cmdchar == 'R')
 	    ptr = (char_u *)"r";
 	else if (cmdchar == 'V')
@@ -302,6 +303,7 @@
 	else
 	    ptr = (char_u *)"i";
 	set_vim_var_string(VV_INSERTMODE, ptr, 1);
+# endif
 	apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
     }
 #endif
@@ -6580,9 +6582,11 @@
 #endif
 
 #ifdef FEAT_AUTOCMD
+# ifdef FEAT_EVAL
     set_vim_var_string(VV_INSERTMODE,
 		   (char_u *)((State & REPLACE_FLAG) ? "i" :
 			    replaceState == VREPLACE ? "v" : "r"), 1);
+# endif
     apply_autocmds(EVENT_INSERTCHANGE, NULL, NULL, FALSE, curbuf);
 #endif
     if (State & REPLACE_FLAG)
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 72ffc18..f88fbf8 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -114,7 +114,6 @@
 # define ex_cc			ex_ni
 # define ex_cnext		ex_ni
 # define ex_cfile		ex_ni
-# define ex_cexpr		ex_ni
 # define qf_list		ex_ni
 # define qf_age			ex_ni
 # define ex_helpgrep		ex_ni
@@ -125,6 +124,9 @@
 # define ex_copen		ex_ni
 # define ex_cwindow		ex_ni
 #endif
+#if !defined(FEAT_QUICKFIX) || !defined(FEAT_EVAL)
+# define ex_cexpr		ex_ni
+#endif
 
 static int	check_more __ARGS((int, int));
 static linenr_T get_address __ARGS((char_u **, int skip, int to_other_file));
diff --git a/src/ex_getln.c b/src/ex_getln.c
index b69076f..a3fac10 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -428,13 +428,10 @@
 	    if (p_wmnu && wild_menu_showing != 0)
 	    {
 		int skt = KeyTyped;
-		int old_RedrawingDisabled;
+		int old_RedrawingDisabled = RedrawingDisabled;
 
 		if (ccline.input_fn)
-		{
-		    old_RedrawingDisabled = RedrawingDisabled;
 		    RedrawingDisabled = 0;
-		}
 
 		if (wild_menu_showing == WM_SCROLLED)
 		{
@@ -463,10 +460,10 @@
 # endif
 		    redraw_statuslines();
 		}
-		if (ccline.input_fn)
-		    RedrawingDisabled = old_RedrawingDisabled;
 		KeyTyped = skt;
 		wild_menu_showing = 0;
+		if (ccline.input_fn)
+		    RedrawingDisabled = old_RedrawingDisabled;
 	    }
 #endif
 	}
@@ -4876,7 +4873,7 @@
 
 /*
  * Get the current command-line type.
- * Returns ':' or '/' or '?' or '@' or '>'
+ * Returns ':' or '/' or '?' or '@' or '>' or '-'
  * Only works when the command line is being edited.
  * Returns NUL when something is wrong.
  */
@@ -4887,6 +4884,8 @@
 
     if (p == NULL)
 	return NUL;
+    if (p->cmdfirstc == NUL)
+	return (p->input_fn) ? '@' : '-';
     return p->cmdfirstc;
 }
 
diff --git a/src/feature.h b/src/feature.h
index 0ab57e9..e69fcd9 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -202,13 +202,6 @@
 #endif
 
 /*
- * +textobjects		Text objects: "vaw", "das", etc.
- */
-#ifdef FEAT_NORMAL
-# define FEAT_TEXTOBJ
-#endif
-
-/*
  * +visual		Visual mode.
  * +visualextra		Extra features for Visual mode (mostly block operators).
  */
@@ -383,12 +376,20 @@
  * +profile		Profiling for functions and scripts.
  */
 #if defined(FEAT_HUGE) \
+	&& defined(FEAT_EVAL) \
 	&& ((defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)) \
 		|| defined(WIN3264))
 # define FEAT_PROFILE
 #endif
 
 /*
+ * +textobjects		Text objects: "vaw", "das", etc.
+ */
+#if defined(FEAT_NORMAL) && defined(FEAT_EVAL)
+# define FEAT_TEXTOBJ
+#endif
+
+/*
  *			Insert mode completion with 'completefunc'.
  */
 #if defined(FEAT_INS_EXPAND) && defined(FEAT_EVAL)
diff --git a/src/fileio.c b/src/fileio.c
index 916fdcb..e743061 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -2796,14 +2796,22 @@
 	if (!buf_valid(buf))
 	    buf = NULL;
 	if (buf == NULL || (buf->b_ml.ml_mfp == NULL && !empty_memline)
-				       || did_cmd || nofile_err || aborting())
+				       || did_cmd || nofile_err
+#ifdef FEAT_EVAL
+				       || aborting()
+#endif
+				       )
 	{
 	    --no_wait_return;
 	    msg_scroll = msg_save;
 	    if (nofile_err)
 		EMSG(_("E676: No matching autocommands for acwrite buffer"));
 
-	    if (aborting() || nofile_err)
+	    if (nofile_err
+#ifdef FEAT_EVAL
+		    || aborting()
+#endif
+		    )
 		/* An aborting error, interrupt or exception in the
 		 * autocommands. */
 		return FAIL;
@@ -6021,8 +6029,10 @@
 	     * Avoid being called recursively by setting "busy".
 	     */
 	    busy = TRUE;
+# ifdef FEAT_EVAL
 	    set_vim_var_string(VV_FCS_REASON, (char_u *)reason, -1);
 	    set_vim_var_string(VV_FCS_CHOICE, (char_u *)"", -1);
+# endif
 	    n = apply_autocmds(EVENT_FILECHANGEDSHELL,
 				      buf->b_fname, buf->b_fname, FALSE, buf);
 	    busy = FALSE;
@@ -6030,12 +6040,14 @@
 	    {
 		if (!buf_valid(buf))
 		    EMSG(_("E246: FileChangedShell autocommand deleted buffer"));
+# ifdef FEAT_EVAL
 		s = get_vim_var_str(VV_FCS_CHOICE);
 		if (STRCMP(s, "reload") == 0 && *reason != 'd')
 		    reload = TRUE;
 		else if (STRCMP(s, "ask") == 0)
 		    n = FALSE;
 		else
+# endif
 		    return 2;
 	    }
 	    if (!n)
@@ -7978,12 +7990,18 @@
 {
     int		did_cmd;
 
+#ifdef FEAT_EVAL
     if (should_abort(*retval))
 	return FALSE;
+#endif
 
     did_cmd = apply_autocmds_group(event, fname, fname_io, force,
 						      AUGROUP_ALL, buf, NULL);
-    if (did_cmd && aborting())
+    if (did_cmd
+#ifdef FEAT_EVAL
+	    && aborting()
+#endif
+	    )
 	*retval = FAIL;
     return did_cmd;
 }
diff --git a/src/main.aap b/src/main.aap
index 83a9cd8..f31f929 100644
--- a/src/main.aap
+++ b/src/main.aap
@@ -6,15 +6,15 @@
 # explanations.
 #
 # Optional arguments:
-#  PREFIX=dir		Overrules the install directory.
-#			Can be specified when installing only.
-#			Example: aap install PREFIX=$HOME
+#  PREFIX=dir           Overrules the install directory.
+#                       Can be specified when installing only.
+#                       Example: aap install PREFIX=$HOME
 #
 
 # Skip the configure stuff when "link.sh" is executing this recipe recursively
 # to build pathdef.c or not building something and auto/config.aap does exist.
 @if ((_no.TARGETARG != "pathdef" and has_build_target())
-@	or not os.path.exists("auto/config.aap")):
+@       or not os.path.exists("auto/config.aap")):
 
     #
     # A U T O C O N F
@@ -25,9 +25,9 @@
     # there is no autoconf program skip this (the signature is often the only
     # thing that's outdated)
     auto/configure {signfile = mysign} : configure.in
-	@if not program_path("autoconf"):
-	    :print Can't find autoconf, using existing configure script.
-	@else:
+        @if not program_path("autoconf"):
+            :print Can't find autoconf, using existing configure script.
+        @else:
             # Move configure aside, autoconf would overwrite it
             :move {exist} configure configure.save
             :sys autoconf
@@ -38,37 +38,37 @@
 
     # Change the configure script to produce config.aap instead of config.mk.
     auto/configure.aap : auto/configure
-	:print Adjusting auto/configure for A-A-P.
-	:cat auto/configure | :eval re.sub("config.mk", "config.aap", stdin)
-							>! auto/configure.aap
-	:chmod 755 auto/configure.aap
+        :print Adjusting auto/configure for A-A-P.
+        :cat auto/configure | :eval re.sub("config.mk", "config.aap", stdin)
+                                                        >! auto/configure.aap
+        :chmod 755 auto/configure.aap
 
     # The configure script uses the directory where it's located, use a link.
     configure.aap:  {buildcheck=}
-	:symlink {f} auto/configure.aap configure.aap
+        :symlink {f} auto/configure.aap configure.aap
 
     # Dependency: run configure.aap to update config.h and config.aap in the
     # "auto" directory.
     config {virtual} auto/config.h auto/config.aap :
-			 auto/configure.aap configure.aap
-			 config.arg config.h.in config.aap.in
-	:sys CONFIG_STATUS=auto/config.status
+                         auto/configure.aap configure.aap
+                         config.arg config.h.in config.aap.in
+        :sys CONFIG_STATUS=auto/config.status
                 ./configure.aap `file2string("config.arg")`
                     --cache-file=auto/config.cache
 
     # Configure arguments: create an empty "config.arg" file when its missing
     config.arg:
-	:touch {exist} config.arg
+        :touch {exist} config.arg
 
     # "auto/config.aap" contains a lot of settings, such as the name of the
     # executable "Target".
     # First update it, forcefully if the "reconfig" target was used.
     @if _no.TARGETARG != "comment" and _no.TARGETARG != "make":
-	@if "reconfig" in var2list(_no.TARGETARG):
-	    :del {force} auto/config.cache auto/config.status
-	    :update {force} auto/config.aap
-	@else:
-	    :update auto/config.aap
+        @if "reconfig" in var2list(_no.TARGETARG):
+            :del {force} auto/config.cache auto/config.status
+            :update {force} auto/config.aap
+        @else:
+            :update auto/config.aap
 
 # Include the recipe that autoconf generated.
 :include auto/config.aap
@@ -87,93 +87,93 @@
 #
 :variant GUI
     GTK
-	GUI_SRC		= gui.c gui_gtk.c gui_gtk_x11.c pty.c gui_beval.c
-			    gui_gtk_f.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_GTK $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	=
-	GUI_LIBS2	= $GTK_LIBNAME
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        GUI_SRC         = gui.c gui_gtk.c gui_gtk_x11.c pty.c gui_beval.c
+                            gui_gtk_f.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_GTK $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       =
+        GUI_LIBS2       = $GTK_LIBNAME
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     KDE
-        GUI_SRC		= gui.c pty.c gui_kde.cc gui_kde_x11.cc
+        GUI_SRC         = gui.c pty.c gui_kde.cc gui_kde_x11.cc
                             gui_kde_wid_moc.cc
                             kvim_iface_skel.cc
-        GUI_OBJ		= $BDIR/gui_kde_wid.o
-        GUI_DEFS	= -DFEAT_GUI_KDE $NARROW_PROTO
-        GUI_IPATH	= $GUI_INC_LOC
-        GUI_LIBS_DIR	= $GUI_LIB_LOC
-        GUI_LIBS1	=
-        GUI_LIBS2	=
-	GUI_TARGETS	= installglinks installkdeicons
-	GUI_MAN_TARGETS	= installghelplinks
+        GUI_OBJ         = $BDIR/gui_kde_wid.o
+        GUI_DEFS        = -DFEAT_GUI_KDE $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       =
+        GUI_LIBS2       =
+        GUI_TARGETS     = installglinks installkdeicons
+        GUI_MAN_TARGETS = installghelplinks
         GUI_TESTTARGET  = gui
 
     MOTIF
-	GUI_SRC		= gui.c gui_motif.c gui_x11.c pty.c gui_beval.c
-		  	  gui_xmdlg.c gui_xmebw.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_MOTIF $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	=
-	GUI_LIBS2	= $MOTIF_LIBNAME -lXt
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        GUI_SRC         = gui.c gui_motif.c gui_x11.c pty.c gui_beval.c
+                          gui_xmdlg.c gui_xmebw.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_MOTIF $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       =
+        GUI_LIBS2       = $MOTIF_LIBNAME -lXt
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     ATHENA
-	# XAW_LIB et al. can be overruled to use Xaw3d widgets
-	XAW_LIB		?= -lXaw
-	GUI_SRC		=  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c \
-			    gui_at_sb.c gui_at_fs.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_ATHENA $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	= $XAW_LIB
-	GUI_LIBS2	= -lXt
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        # XAW_LIB et al. can be overruled to use Xaw3d widgets
+        XAW_LIB         ?= -lXaw
+        GUI_SRC         =  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c \
+                            gui_at_sb.c gui_at_fs.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_ATHENA $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       = $XAW_LIB
+        GUI_LIBS2       = -lXt
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     NEXTAW
-	# XAW_LIB et al. can be overruled to use Xaw3d widgets
-	XAW_LIB		?= -lXaw
-	GUI_SRC		=  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c
-			    gui_at_fs.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_ATHENA -DFEAT_GUI_NEXTAW $NARROW_PROTO
-	GUI_IPATH	= $GUI_INC_LOC
-	GUI_LIBS_DIR	= $GUI_LIB_LOC
-	GUI_LIBS1	= $NEXTAW_LIB
-	GUI_LIBS2	= -lXt
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        # XAW_LIB et al. can be overruled to use Xaw3d widgets
+        XAW_LIB         ?= -lXaw
+        GUI_SRC         =  gui.c gui_athena.c gui_x11.c pty.c gui_beval.c
+                            gui_at_fs.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_ATHENA -DFEAT_GUI_NEXTAW $NARROW_PROTO
+        GUI_IPATH       = $GUI_INC_LOC
+        GUI_LIBS_DIR    = $GUI_LIB_LOC
+        GUI_LIBS1       = $NEXTAW_LIB
+        GUI_LIBS2       = -lXt
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     PHOTONGUI
-	GUI_SRC		= gui.c gui_photon.c pty.c
-	GUI_OBJ		=
-	GUI_DEFS	= -DFEAT_GUI_PHOTON
-	GUI_IPATH	=
-	GUI_LIBS_DIR	=
-	GUI_LIBS1	= -lph -lphexlib
-	GUI_LIBS2	=
-	GUI_TARGETS	= installglinks
-	GUI_MAN_TARGETS	= installghelplinks
-	GUI_TESTTARGET	= gui
+        GUI_SRC         = gui.c gui_photon.c pty.c
+        GUI_OBJ         =
+        GUI_DEFS        = -DFEAT_GUI_PHOTON
+        GUI_IPATH       =
+        GUI_LIBS_DIR    =
+        GUI_LIBS1       = -lph -lphexlib
+        GUI_LIBS2       =
+        GUI_TARGETS     = installglinks
+        GUI_MAN_TARGETS = installghelplinks
+        GUI_TESTTARGET  = gui
     *
-	GUI_SRC		=
-	GUI_OBJ		=
-	GUI_DEFS	=
-	GUI_IPATH	=
-	GUI_LIBS_DIR	=
-	GUI_LIBS1	=
-	GUI_LIBS2	=
-	GUI_TARGETS	=
-	GUI_MAN_TARGETS	=
-	GUI_TESTTARGET	=
+        GUI_SRC         =
+        GUI_OBJ         =
+        GUI_DEFS        =
+        GUI_IPATH       =
+        GUI_LIBS_DIR    =
+        GUI_LIBS1       =
+        GUI_LIBS2       =
+        GUI_TARGETS     =
+        GUI_MAN_TARGETS =
+        GUI_TESTTARGET  =
 
 
 PRE_DEFS = -Iproto -I. $DEFS $GUI_DEFS $GUI_IPATH $CPPFLAGS $?(EXTRA_IPATHS)
@@ -216,71 +216,71 @@
 #     update to a newer version of A-A-P.
 @if not has_target("fetch"):
     fetch:
-	:execute ../main.aap fetch
+        :execute ../main.aap fetch
 
 
 # All the source files that need to be compiled.
 # Some are optional and depend on configure.
 # "version.c" is missing, it's always compiled (see below).
 Source =
-	buffer.c
-	charset.c
-	diff.c
-	digraph.c
-	edit.c
-	eval.c
-	ex_cmds.c
-	ex_cmds2.c
-	ex_docmd.c
-	ex_eval.c
-	ex_getln.c
-	fileio.c
-	fold.c
-	getchar.c
+        buffer.c
+        charset.c
+        diff.c
+        digraph.c
+        edit.c
+        eval.c
+        ex_cmds.c
+        ex_cmds2.c
+        ex_docmd.c
+        ex_eval.c
+        ex_getln.c
+        fileio.c
+        fold.c
+        getchar.c
         hardcopy.c
-	hashtable.c
-	if_cscope.c
-	if_xcmdsrv.c
-	main.c
-	mark.c
-	memfile.c
-	memline.c
-	menu.c
-	message.c
-	misc1.c
-	misc2.c
-	move.c
-	mbyte.c
-	normal.c
-	ops.c
-	option.c
-	os_unix.c
-	auto/pathdef.c
-	quickfix.c
-	regexp.c
-	screen.c
-	search.c
-	spell.c
-	syntax.c
-	tag.c
-	term.c
-	ui.c
-	undo.c
-	window.c
-	$OS_EXTRA_SRC
-	$GUI_SRC
-	$HANGULIN_SRC
+        hashtable.c
+        if_cscope.c
+        if_xcmdsrv.c
+        main.c
+        mark.c
+        memfile.c
+        memline.c
+        menu.c
+        message.c
+        misc1.c
+        misc2.c
+        move.c
+        mbyte.c
+        normal.c
+        ops.c
+        option.c
+        os_unix.c
+        auto/pathdef.c
+        quickfix.c
+        regexp.c
+        screen.c
+        search.c
+        spell.c
+        syntax.c
+        tag.c
+        term.c
+        ui.c
+        undo.c
+        window.c
+        $OS_EXTRA_SRC
+        $GUI_SRC
+        $HANGULIN_SRC
         $MZSCHEME_SRC
-	$PERL_SRC
-	$NETBEANS_SRC
-	$PYTHON_SRC
-	$TCL_SRC
-	$RUBY_SRC
-	$SNIFF_SRC
-	$WORKSHOP_SRC
+        $PERL_SRC
+        $NETBEANS_SRC
+        $PYTHON_SRC
+        $TCL_SRC
+        $RUBY_SRC
+        $SNIFF_SRC
+        $WORKSHOP_SRC
 
 Objects =
-	$GUI_OBJ
+        $GUI_OBJ
 
 # TODO: make is still used for subdirectories, need to write a recipe.
 MAKE ?= make
@@ -306,48 +306,48 @@
 :program $Target : $Source $Objects
 
 :action build my_prog object
-	version_obj = `src2obj("version.c")`
-	:do compile {target = $version_obj} version.c
-	#:do build {target = $target {filetype = program}} $source $version_obj
-	link_sed = $BDIR/link.sed
-	@if os.path.exists(link_sed):
-	    :move {force} $link_sed auto/link.sed
-	@else:
-	    :del {force} auto/link.sed
-	:update link2.sh
-	:sys LINK="$?(PURIFY) $?(SHRPENV) $CC $LDFLAGS \
-		-o $target $source $version_obj $LIBS" \
-		MAKE="aap" sh ./link2.sh
-	:copy {force} auto/link.sed $BDIR/link.sed
+        version_obj = `src2obj("version.c")`
+        :do compile {target = $version_obj} version.c
+        #:do build {target = $target {filetype = program}} $source $version_obj
+        link_sed = $BDIR/link.sed
+        @if os.path.exists(link_sed):
+            :move {force} $link_sed auto/link.sed
+        @else:
+            :del {force} auto/link.sed
+        :update link2.sh
+        :sys LINK="$?(PURIFY) $?(SHRPENV) $CC $LDFLAGS \
+                -o $target $source $version_obj $LIBS" \
+                MAKE="aap" sh ./link2.sh
+        :copy {force} auto/link.sed $BDIR/link.sed
 
 # "link.sh" must be modified for A-A-P
 link2.sh : link.sh
     :print Adjusting $-source for A-A-P.
     :cat $source | :eval re.sub("objects/pathdef.o", "pathdef", stdin)
-								      >! $target
+                                                                      >! $target
 
 xxd/xxd$EXESUF: xxd/xxd.c
     :sys cd xxd; CC="$CC" CFLAGS="$CPPFLAGS $CFLAGS" \
-	    $MAKE -f Makefile
+            $MAKE -f Makefile
 
 # Build the language specific files if they were unpacked.
 # Generate the converted .mo files separately, it's no problem if this fails.
 languages {virtual}:
-	@if _no.MAKEMO:
-	    :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix
-	    @try:
-		:sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix converted
-	    @except:
-		:print Generated converted language files failed, continuing
+        @if _no.MAKEMO:
+            :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix
+            @try:
+                :sys cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix converted
+            @except:
+                :print Generated converted language files failed, continuing
 
 # Update the *.po files for changes in the sources.  Only run manually.
 update-po {virtual}:
-	cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix update-po
+        cd $PODIR; CC="$CC" $MAKE prefix=$DESTDIR$prefix update-po
 
 auto/if_perl.c: if_perl.xs
-	:sys $PERL -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $target
-	:sys $PERL $PERLLIB/ExtUtils/xsubpp -prototypes -typemap \
-	    $PERLLIB/ExtUtils/typemap if_perl.xs >> $target
+        :sys $PERL -e 'unless ( $$] >= 5.005 ) { for (qw(na defgv errgv)) { print "#define PL_$$_ $$_\n" }}' > $target
+        :sys $PERL $PERLLIB/ExtUtils/xsubpp -prototypes -typemap \
+            $PERLLIB/ExtUtils/typemap if_perl.xs >> $target
 
 $BDIR/gui_kde_wid.o: gui_kde_wid.cc
         :sys $MOC -o gui_kde_wid_moc.cc gui_kde_wid.h
@@ -364,63 +364,63 @@
 
 
 auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
-	:sys CC="$CC $CFLAGS" srcdir=$srcdir sh $srcdir/osdef.sh
+        :sys CC="$CC $CFLAGS" srcdir=$srcdir sh $srcdir/osdef.sh
 
 pathdef {virtual} : $BDIR/auto/pathdef$OBJSUF
 
 auto/pathdef.c: auto/config.aap
-	:print Creating $target
-	:print >! $target /* pathdef.c */
-	:print >> $target /* This file is automatically created by main.aap */
-	:print >> $target /* DO NOT EDIT!  Change main.aap only. */
-	:print >> $target $#include "vim.h"
-	:print >> $target char_u *default_vim_dir = (char_u *)"$VIMRCLOC";
-	:print >> $target char_u *default_vimruntime_dir = (char_u *)"$?VIMRUNTIMEDIR";
-	v = $CC -c -I$srcdir $CFLAGS
+        :print Creating $target
+        :print >! $target /* pathdef.c */
+        :print >> $target /* This file is automatically created by main.aap */
+        :print >> $target /* DO NOT EDIT!  Change main.aap only. */
+        :print >> $target $#include "vim.h"
+        :print >> $target char_u *default_vim_dir = (char_u *)"$VIMRCLOC";
+        :print >> $target char_u *default_vimruntime_dir = (char_u *)"$?VIMRUNTIMEDIR";
+        v = $CC -c -I$srcdir $CFLAGS
         @v = string.replace(v, '"', '\\"')
-	:print >> $target char_u *all_cflags = (char_u *)"$v";
-	linkcmd = $CC $LDFLAGS -o $VIMTARGET $LIBS
-	link_sed = $BDIR/link.sed
-	@if os.path.exists(link_sed):
-	    # filter $linkcmd through $BDIR/link.sed
-	    :print $linkcmd | :syseval sed -f $link_sed | :eval re.sub("\n", "", stdin) | :assign linkcmd
+        :print >> $target char_u *all_cflags = (char_u *)"$v";
+        linkcmd = $CC $LDFLAGS -o $VIMTARGET $LIBS
+        link_sed = $BDIR/link.sed
+        @if os.path.exists(link_sed):
+            # filter $linkcmd through $BDIR/link.sed
+            :print $linkcmd | :syseval sed -f $link_sed | :eval re.sub("\n", "", stdin) | :assign linkcmd
         @linkcmd = string.replace(linkcmd, '"', '\\"')
-	:print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
-	@if _no.get("COMPILEDBY"):
-	    who = $COMPILEDBY
-	    where = ''
-	@else:
-	    :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who
+        :print >> $target char_u *all_lflags = (char_u *)"$linkcmd";
+        @if _no.get("COMPILEDBY"):
+            who = $COMPILEDBY
+            where = ''
+        @else:
+            :syseval whoami | :eval re.sub("\n", "", stdin) | :assign who
 
-	    :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
-	:print >> $target char_u *compiled_user = (char_u *)"$who";
-	:print >> $target char_u *compiled_sys = (char_u *)"$where";
+            :syseval hostname | :eval re.sub("\n", "", stdin) | :assign where
+        :print >> $target char_u *compiled_user = (char_u *)"$who";
+        :print >> $target char_u *compiled_sys = (char_u *)"$where";
 
 
 ### Names of the programs and targets
-VIMTARGET	= $VIMNAME$EXESUF
-EXTARGET	= $EXNAME$LNKSUF
-VIEWTARGET	= $VIEWNAME$LNKSUF
-GVIMNAME	= g$VIMNAME
-GVIMTARGET	= $GVIMNAME$LNKSUF
-GVIEWNAME	= g$VIEWNAME
-GVIEWTARGET	= $GVIEWNAME$LNKSUF
-RVIMNAME	= r$VIMNAME
-RVIMTARGET	= $RVIMNAME$LNKSUF
-RVIEWNAME	= r$VIEWNAME
-RVIEWTARGET	= $RVIEWNAME$LNKSUF
-RGVIMNAME	= r$GVIMNAME
-RGVIMTARGET	= $RGVIMNAME$LNKSUF
-RGVIEWNAME	= r$GVIEWNAME
-RGVIEWTARGET	= $RGVIEWNAME$LNKSUF
-VIMDIFFNAME	= $(VIMNAME)diff
-GVIMDIFFNAME	= g$VIMDIFFNAME
-VIMDIFFTARGET	= $VIMDIFFNAME$LNKSUF
-GVIMDIFFTARGET	= $GVIMDIFFNAME$LNKSUF
-EVIMNAME	= e$VIMNAME
-EVIMTARGET	= $EVIMNAME$LNKSUF
-EVIEWNAME	= e$VIEWNAME
-EVIEWTARGET	= $EVIEWNAME$LNKSUF
+VIMTARGET       = $VIMNAME$EXESUF
+EXTARGET        = $EXNAME$LNKSUF
+VIEWTARGET      = $VIEWNAME$LNKSUF
+GVIMNAME        = g$VIMNAME
+GVIMTARGET      = $GVIMNAME$LNKSUF
+GVIEWNAME       = g$VIEWNAME
+GVIEWTARGET     = $GVIEWNAME$LNKSUF
+RVIMNAME        = r$VIMNAME
+RVIMTARGET      = $RVIMNAME$LNKSUF
+RVIEWNAME       = r$VIEWNAME
+RVIEWTARGET     = $RVIEWNAME$LNKSUF
+RGVIMNAME       = r$GVIMNAME
+RGVIMTARGET     = $RGVIMNAME$LNKSUF
+RGVIEWNAME      = r$GVIEWNAME
+RGVIEWTARGET    = $RGVIEWNAME$LNKSUF
+VIMDIFFNAME     = $(VIMNAME)diff
+GVIMDIFFNAME    = g$VIMDIFFNAME
+VIMDIFFTARGET   = $VIMDIFFNAME$LNKSUF
+GVIMDIFFTARGET  = $GVIMDIFFNAME$LNKSUF
+EVIMNAME        = e$VIMNAME
+EVIMTARGET      = $EVIMNAME$LNKSUF
+EVIEWNAME       = e$VIEWNAME
+EVIEWTARGET     = $EVIEWNAME$LNKSUF
 
 ### Names of the tools that are also made
 TOOLS = xxd/xxd$EXESUF
@@ -453,67 +453,67 @@
 PRINTSUBDIR = /print
 PODIR = po
 
-### VIMLOC	common root of the Vim files (all versions)
-### VIMRTLOC	common root of the runtime Vim files (this version)
-### VIMRCLOC	compiled-in location for global [g]vimrc files (all versions)
+### VIMLOC      common root of the Vim files (all versions)
+### VIMRTLOC    common root of the runtime Vim files (this version)
+### VIMRCLOC    compiled-in location for global [g]vimrc files (all versions)
 ### VIMRUNTIMEDIR  compiled-in location for runtime files (optional)
-### HELPSUBLOC	location for help files
-### COLSUBLOC	location for colorscheme files
-### SYNSUBLOC	location for syntax files
-### INDSUBLOC	location for indent files
-### AUTOSUBLOC	location for standard autoload files
-### PLUGSUBLOC	location for standard plugin files
+### HELPSUBLOC  location for help files
+### COLSUBLOC   location for colorscheme files
+### SYNSUBLOC   location for syntax files
+### INDSUBLOC   location for indent files
+### AUTOSUBLOC  location for standard autoload files
+### PLUGSUBLOC  location for standard plugin files
 ### FTPLUGSUBLOC  location for ftplugin files
-### LANGSUBLOC	location for language files
-### COMPSUBLOC	location for compiler files
-### KMAPSUBLOC	location for keymap files
-### MACROSUBLOC	location for macro files
-### TOOLSSUBLOC	location for tools files
-### TUTORSUBLOC	location for tutor files
-### PRINTSUBLOC	location for print files
-### SCRIPTLOC	location for script files (menu.vim, bugreport.vim, ..)
+### LANGSUBLOC  location for language files
+### COMPSUBLOC  location for compiler files
+### KMAPSUBLOC  location for keymap files
+### MACROSUBLOC location for macro files
+### TOOLSSUBLOC location for tools files
+### TUTORSUBLOC location for tutor files
+### PRINTSUBLOC location for print files
+### SCRIPTLOC   location for script files (menu.vim, bugreport.vim, ..)
 ### You can override these if you want to install them somewhere else.
 ### Edit feature.h for compile-time settings.
-VIMLOC		= $DATADIR$VIMDIR
-VIMRTLOC	= $DATADIR$VIMDIR$VIMRTDIR
-VIMRCLOC	= $VIMLOC
-HELPSUBLOC	= $VIMRTLOC$HELPSUBDIR
-COLSUBLOC	= $VIMRTLOC$COLSUBDIR
-SYNSUBLOC	= $VIMRTLOC$SYNSUBDIR
-INDSUBLOC	= $VIMRTLOC$INDSUBDIR
-AUTOSUBLOC	= $VIMRTLOC$AUTOSUBDIR
-PLUGSUBLOC	= $VIMRTLOC$PLUGSUBDIR
-FTPLUGSUBLOC	= $VIMRTLOC$FTPLUGSUBDIR
-LANGSUBLOC	= $VIMRTLOC$LANGSUBDIR
-COMPSUBLOC	= $VIMRTLOC$COMPSUBDIR
-KMAPSUBLOC	= $VIMRTLOC$KMAPSUBDIR
-MACROSUBLOC	= $VIMRTLOC$MACROSUBDIR
-TOOLSSUBLOC	= $VIMRTLOC$TOOLSSUBDIR
-TUTORSUBLOC	= $VIMRTLOC$TUTORSUBDIR
-PRINTSUBLOC	= $VIMRTLOC$PRINTSUBDIR
-SCRIPTLOC	= $VIMRTLOC
+VIMLOC          = $DATADIR$VIMDIR
+VIMRTLOC        = $DATADIR$VIMDIR$VIMRTDIR
+VIMRCLOC        = $VIMLOC
+HELPSUBLOC      = $VIMRTLOC$HELPSUBDIR
+COLSUBLOC       = $VIMRTLOC$COLSUBDIR
+SYNSUBLOC       = $VIMRTLOC$SYNSUBDIR
+INDSUBLOC       = $VIMRTLOC$INDSUBDIR
+AUTOSUBLOC      = $VIMRTLOC$AUTOSUBDIR
+PLUGSUBLOC      = $VIMRTLOC$PLUGSUBDIR
+FTPLUGSUBLOC    = $VIMRTLOC$FTPLUGSUBDIR
+LANGSUBLOC      = $VIMRTLOC$LANGSUBDIR
+COMPSUBLOC      = $VIMRTLOC$COMPSUBDIR
+KMAPSUBLOC      = $VIMRTLOC$KMAPSUBDIR
+MACROSUBLOC     = $VIMRTLOC$MACROSUBDIR
+TOOLSSUBLOC     = $VIMRTLOC$TOOLSSUBDIR
+TUTORSUBLOC     = $VIMRTLOC$TUTORSUBDIR
+PRINTSUBLOC     = $VIMRTLOC$PRINTSUBDIR
+SCRIPTLOC       = $VIMRTLOC
 
 ### Only set VIMRUNTIMEDIR when VIMRTLOC is set to a different location and
 ### the runtime directory is not below it.
 #VIMRUNTIMEDIR = $VIMRTLOC
 
 ### Name of the evim file target.
-EVIM_FILE	= $DESTDIR$SCRIPTLOC/evim.vim
-MSWIN_FILE	= $DESTDIR$SCRIPTLOC/mswin.vim
+EVIM_FILE       = $DESTDIR$SCRIPTLOC/evim.vim
+MSWIN_FILE      = $DESTDIR$SCRIPTLOC/mswin.vim
 
 ### Name of the menu file target.
-SYS_MENU_FILE	= $DESTDIR$SCRIPTLOC/menu.vim
+SYS_MENU_FILE   = $DESTDIR$SCRIPTLOC/menu.vim
 SYS_SYNMENU_FILE = $DESTDIR$SCRIPTLOC/synmenu.vim
 SYS_DELMENU_FILE = $DESTDIR$SCRIPTLOC/delmenu.vim
 
 ### Name of the bugreport file target.
-SYS_BUGR_FILE	= $DESTDIR$SCRIPTLOC/bugreport.vim
+SYS_BUGR_FILE   = $DESTDIR$SCRIPTLOC/bugreport.vim
 
 ### Name of the file type detection file target.
 SYS_FILETYPE_FILE = $DESTDIR$SCRIPTLOC/filetype.vim
 
 ### Name of the file type detection file target.
-SYS_FTOFF_FILE	= $DESTDIR$SCRIPTLOC/ftoff.vim
+SYS_FTOFF_FILE  = $DESTDIR$SCRIPTLOC/ftoff.vim
 
 ### Name of the file type detection script file target.
 SYS_SCRIPTS_FILE = $DESTDIR$SCRIPTLOC/scripts.vim
@@ -622,9 +622,9 @@
 
 # These are directories, create them when needed.
 :attr {directory = $DIRMOD} $DEST_BIN $DEST_VIM $DEST_RT $DEST_HELP $DEST_COL
-		$DEST_SYN $DEST_IND $DEST_AUTO $DEST_PLUG $DEST_FTP $DEST_LANG
-		$DEST_COMP $DEST_KMAP $DEST_MACRO $DEST_TOOLS $DEST_TUTOR
-		$DEST_SCRIPT $DEST_PRINT $DEST_MAN
+                $DEST_SYN $DEST_IND $DEST_AUTO $DEST_PLUG $DEST_FTP $DEST_LANG
+                $DEST_COMP $DEST_KMAP $DEST_MACRO $DEST_TOOLS $DEST_TUTOR
+                $DEST_SCRIPT $DEST_PRINT $DEST_MAN
 
 #
 # I N S T A L L
@@ -640,235 +640,235 @@
         :update installvim installtools install-languages install-icons
     @else:
         # Bin directory is not writable, need to become root.
-	:print The destination directory "$DEST_BIN" is not writable.
-	:print If this is the wrong directory, use PREFIX to specify another one.
+        :print The destination directory "$DEST_BIN" is not writable.
+        :print If this is the wrong directory, use PREFIX to specify another one.
         :print Otherwise, type the root password to continue installing.
         :asroot $AAP install
 
 installvim {virtual}: installvimbin installruntime installlinks \
-			installhelplinks installmacros installtutor
+                        installhelplinks installmacros installtutor
 
 installvimbin {virtual}{force}: $Target $DEST_BIN
-	exe = $DEST_BIN/$VIMTARGET
-	@if os.path.exists(exe):
-	    # Move the old executable aside and delete it.  Any other method
-	    # may cause a crash if the executable is currently being used.
-	    :move {force} $exe $(exe).rm
-	    :del {force} $(exe).rm
-	:copy $VIMTARGET $DEST_BIN
-	:do strip $exe
-	:chmod $BINMOD $DEST_BIN/$VIMTARGET
+        exe = $DEST_BIN/$VIMTARGET
+        @if os.path.exists(exe):
+            # Move the old executable aside and delete it.  Any other method
+            # may cause a crash if the executable is currently being used.
+            :move {force} $exe $(exe).rm
+            :del {force} $(exe).rm
+        :copy $VIMTARGET $DEST_BIN
+        :do strip $exe
+        :chmod $BINMOD $DEST_BIN/$VIMTARGET
 # may create a link to the new executable from /usr/bin/vi
-	@if _no.get("LINKIT"):
-	    :sys $LINKIT
+        @if _no.get("LINKIT"):
+            :sys $LINKIT
 
 # install the help files; first adjust the contents for the location
 installruntime {virtual}{force}: $HELPSOURCE/vim.1 $DEST_MAN $DEST_VIM
-		$DEST_RT $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
-		$DEST_FTP $DEST_AUTO $DEST_PLUG $DEST_TUTOR $DEST_COMP
+                $DEST_RT $DEST_HELP $DEST_COL $DEST_SYN $DEST_IND
+                $DEST_FTP $DEST_AUTO $DEST_PLUG $DEST_TUTOR $DEST_COMP
                 $DEST_PRINT
-	:print generating $DEST_MAN/$(VIMNAME).1
-	:cat $HELPSOURCE/vim.1 |
-		:eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/doc", _no.HELPSUBLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/syntax", _no.SYNSUBLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/vimrc",
-					       _no.VIMRCLOC + "/vimrc", stdin) |
-		:eval re.sub(_no.VIMLOC + "/gvimrc",
-					      _no.VIMRCLOC + "/gvimrc", stdin) |
-		:eval re.sub(_no.VIMLOC + "/menu.vim",
-					   _no.SCRIPTLOC + "/menu.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/bugreport.vim",
-				      _no.SCRIPTLOC + "/bugreport.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/filetype.vim",
-				       _no.SCRIPTLOC + "/filetype.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/ftoff.vim",
-					  _no.SCRIPTLOC + "/ftoff.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/scripts.vim",
-					_no.SCRIPTLOC + "/scripts.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/optwin.vim",
-					 _no.SCRIPTLOC + "/optwin.vim", stdin) |
-		:eval re.sub(_no.VIMLOC + "/\\*.ps",
-						 _no.SCRIPTLOC + "/*.ps", stdin)
-		>! $DEST_MAN/$(VIMNAME).1
-	:chmod $MANMOD $DEST_MAN/$(VIMNAME).1
+        :print generating $DEST_MAN/$(VIMNAME).1
+        :cat $HELPSOURCE/vim.1 |
+                :eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/doc", _no.HELPSUBLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/syntax", _no.SYNSUBLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/vimrc",
+                                               _no.VIMRCLOC + "/vimrc", stdin) |
+                :eval re.sub(_no.VIMLOC + "/gvimrc",
+                                              _no.VIMRCLOC + "/gvimrc", stdin) |
+                :eval re.sub(_no.VIMLOC + "/menu.vim",
+                                           _no.SCRIPTLOC + "/menu.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/bugreport.vim",
+                                      _no.SCRIPTLOC + "/bugreport.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/filetype.vim",
+                                       _no.SCRIPTLOC + "/filetype.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/ftoff.vim",
+                                          _no.SCRIPTLOC + "/ftoff.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/scripts.vim",
+                                        _no.SCRIPTLOC + "/scripts.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/optwin.vim",
+                                         _no.SCRIPTLOC + "/optwin.vim", stdin) |
+                :eval re.sub(_no.VIMLOC + "/\\*.ps",
+                                                 _no.SCRIPTLOC + "/*.ps", stdin)
+                >! $DEST_MAN/$(VIMNAME).1
+        :chmod $MANMOD $DEST_MAN/$(VIMNAME).1
 
-	:print generating $DEST_MAN/$(VIMNAME)tutor.1
-	:cat $HELPSOURCE/vimtutor.1 |
-		:eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
-		:eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin)
-		>! $DEST_MAN/$(VIMNAME)tutor.1
-	:chmod $MANMOD $DEST_MAN/$(VIMNAME)tutor.1
+        :print generating $DEST_MAN/$(VIMNAME)tutor.1
+        :cat $HELPSOURCE/vimtutor.1 |
+                :eval re.sub("/usr/local/lib/vim", _no.VIMLOC, stdin) |
+                :eval re.sub(_no.VIMLOC + "/tutor", _no.TUTORSUBLOC, stdin)
+                >! $DEST_MAN/$(VIMNAME)tutor.1
+        :chmod $MANMOD $DEST_MAN/$(VIMNAME)tutor.1
 
-	:copy $HELPSOURCE/vimdiff.1 $DEST_MAN/$(VIMDIFFNAME).1
-	:chmod $MANMOD $DEST_MAN/$(VIMDIFFNAME).1
+        :copy $HELPSOURCE/vimdiff.1 $DEST_MAN/$(VIMDIFFNAME).1
+        :chmod $MANMOD $DEST_MAN/$(VIMDIFFNAME).1
 
-	:print generating $DEST_MAN/$(EVIMNAME).1
-	:cat $HELPSOURCE/evim.1 |
-		:eval re.sub("/usr/local/lib/vim", _no.SCRIPTLOC, stdin)
-		>! $DEST_MAN/$(EVIMNAME).1
-	:chmod $MANMOD $DEST_MAN/$(EVIMNAME).1
+        :print generating $DEST_MAN/$(EVIMNAME).1
+        :cat $HELPSOURCE/evim.1 |
+                :eval re.sub("/usr/local/lib/vim", _no.SCRIPTLOC, stdin)
+                >! $DEST_MAN/$(EVIMNAME).1
+        :chmod $MANMOD $DEST_MAN/$(EVIMNAME).1
 
         :cd $HELPSOURCE
         @try:
             XTRA = `glob.glob("*.??x")` `glob.glob("tags-??")`
         @except:
             XTRA =       # It's OK if there are no matches.
-	:copy *.txt tags $XTRA $DEST_HELP
+        :copy *.txt tags $XTRA $DEST_HELP
         :cd -
         :cd $DEST_HELP
-	:chmod $HELPMOD *.txt tags $XTRA
+        :chmod $HELPMOD *.txt tags $XTRA
         :cd -
-	:copy  $HELPSOURCE/*.pl $DEST_HELP
-	:chmod $SCRIPTMOD $DEST_HELP/*.pl
+        :copy  $HELPSOURCE/*.pl $DEST_HELP
+        :chmod $SCRIPTMOD $DEST_HELP/*.pl
 # install the menu files
-	:copy $SCRIPTSOURCE/menu.vim $SYS_MENU_FILE
-	:chmod $VIMSCRIPTMOD $SYS_MENU_FILE
-	:copy $SCRIPTSOURCE/synmenu.vim $SYS_SYNMENU_FILE
-	:chmod $VIMSCRIPTMOD $SYS_SYNMENU_FILE
-	:copy $SCRIPTSOURCE/delmenu.vim $SYS_DELMENU_FILE
-	:chmod $VIMSCRIPTMOD $SYS_DELMENU_FILE
+        :copy $SCRIPTSOURCE/menu.vim $SYS_MENU_FILE
+        :chmod $VIMSCRIPTMOD $SYS_MENU_FILE
+        :copy $SCRIPTSOURCE/synmenu.vim $SYS_SYNMENU_FILE
+        :chmod $VIMSCRIPTMOD $SYS_SYNMENU_FILE
+        :copy $SCRIPTSOURCE/delmenu.vim $SYS_DELMENU_FILE
+        :chmod $VIMSCRIPTMOD $SYS_DELMENU_FILE
 # install the evim file
-	:copy $SCRIPTSOURCE/mswin.vim $MSWIN_FILE
-	:chmod $VIMSCRIPTMOD $MSWIN_FILE
-	:copy $SCRIPTSOURCE/evim.vim $EVIM_FILE
-	:chmod $VIMSCRIPTMOD $EVIM_FILE
+        :copy $SCRIPTSOURCE/mswin.vim $MSWIN_FILE
+        :chmod $VIMSCRIPTMOD $MSWIN_FILE
+        :copy $SCRIPTSOURCE/evim.vim $EVIM_FILE
+        :chmod $VIMSCRIPTMOD $EVIM_FILE
 # install the bugreport file
-	:copy $SCRIPTSOURCE/bugreport.vim $SYS_BUGR_FILE
-	:chmod $VIMSCRIPTMOD $SYS_BUGR_FILE
+        :copy $SCRIPTSOURCE/bugreport.vim $SYS_BUGR_FILE
+        :chmod $VIMSCRIPTMOD $SYS_BUGR_FILE
 # install the example vimrc files
-	:copy $SCRIPTSOURCE/vimrc_example.vim $DEST_SCRIPT
-	:chmod $VIMSCRIPTMOD $DEST_SCRIPT/vimrc_example.vim
-	:copy $SCRIPTSOURCE/gvimrc_example.vim $DEST_SCRIPT
-	:chmod $VIMSCRIPTMOD $DEST_SCRIPT/gvimrc_example.vim
+        :copy $SCRIPTSOURCE/vimrc_example.vim $DEST_SCRIPT
+        :chmod $VIMSCRIPTMOD $DEST_SCRIPT/vimrc_example.vim
+        :copy $SCRIPTSOURCE/gvimrc_example.vim $DEST_SCRIPT
+        :chmod $VIMSCRIPTMOD $DEST_SCRIPT/gvimrc_example.vim
 # install the file type detection files
-	:copy $SCRIPTSOURCE/filetype.vim $SYS_FILETYPE_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FILETYPE_FILE
-	:copy $SCRIPTSOURCE/ftoff.vim $SYS_FTOFF_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FTOFF_FILE
-	:copy $SCRIPTSOURCE/scripts.vim $SYS_SCRIPTS_FILE
-	:chmod $VIMSCRIPTMOD $SYS_SCRIPTS_FILE
-	:copy $SCRIPTSOURCE/ftplugin.vim $SYS_FTPLUGIN_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FTPLUGIN_FILE
-	:copy $SCRIPTSOURCE/ftplugof.vim $SYS_FTPLUGOF_FILE
-	:chmod $VIMSCRIPTMOD $SYS_FTPLUGOF_FILE
-	:copy $SCRIPTSOURCE/indent.vim $SYS_INDENT_FILE
-	:chmod $VIMSCRIPTMOD $SYS_INDENT_FILE
-	:copy $SCRIPTSOURCE/indoff.vim $SYS_INDOFF_FILE
-	:chmod $VIMSCRIPTMOD $SYS_INDOFF_FILE
-	:copy $SCRIPTSOURCE/optwin.vim $SYS_OPTWIN_FILE
-	:chmod $VIMSCRIPTMOD $SYS_OPTWIN_FILE
+        :copy $SCRIPTSOURCE/filetype.vim $SYS_FILETYPE_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FILETYPE_FILE
+        :copy $SCRIPTSOURCE/ftoff.vim $SYS_FTOFF_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FTOFF_FILE
+        :copy $SCRIPTSOURCE/scripts.vim $SYS_SCRIPTS_FILE
+        :chmod $VIMSCRIPTMOD $SYS_SCRIPTS_FILE
+        :copy $SCRIPTSOURCE/ftplugin.vim $SYS_FTPLUGIN_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FTPLUGIN_FILE
+        :copy $SCRIPTSOURCE/ftplugof.vim $SYS_FTPLUGOF_FILE
+        :chmod $VIMSCRIPTMOD $SYS_FTPLUGOF_FILE
+        :copy $SCRIPTSOURCE/indent.vim $SYS_INDENT_FILE
+        :chmod $VIMSCRIPTMOD $SYS_INDENT_FILE
+        :copy $SCRIPTSOURCE/indoff.vim $SYS_INDOFF_FILE
+        :chmod $VIMSCRIPTMOD $SYS_INDOFF_FILE
+        :copy $SCRIPTSOURCE/optwin.vim $SYS_OPTWIN_FILE
+        :chmod $VIMSCRIPTMOD $SYS_OPTWIN_FILE
 # install the print resource files
-	:copy $PRINTSOURCE/*.ps $DEST_PRINT
-	:chmod $FILEMOD $DEST_PRINT/*.ps
+        :copy $PRINTSOURCE/*.ps $DEST_PRINT
+        :chmod $FILEMOD $DEST_PRINT/*.ps
 # install the colorscheme files
-	:copy $COLSOURCE/*.vim $COLSOURCE/README.txt $DEST_COL
-	:chmod $HELPMOD $DEST_COL/*.vim $DEST_COL/README.txt
+        :copy $COLSOURCE/*.vim $COLSOURCE/README.txt $DEST_COL
+        :chmod $HELPMOD $DEST_COL/*.vim $DEST_COL/README.txt
 # install the syntax files
-	:copy $SYNSOURCE/*.vim $SYNSOURCE/README.txt $DEST_SYN
-	:chmod $HELPMOD $DEST_SYN/*.vim $DEST_SYN/README.txt
+        :copy $SYNSOURCE/*.vim $SYNSOURCE/README.txt $DEST_SYN
+        :chmod $HELPMOD $DEST_SYN/*.vim $DEST_SYN/README.txt
 # install the indent files
-	:copy $INDSOURCE/*.vim $INDSOURCE/README.txt $DEST_IND
-	:chmod $HELPMOD $DEST_IND/*.vim
+        :copy $INDSOURCE/*.vim $INDSOURCE/README.txt $DEST_IND
+        :chmod $HELPMOD $DEST_IND/*.vim
 # install the standard autoload files
-	:copy $AUTOSOURCE/*.vim $AUTOSOURCE/README.txt $DEST_AUTO
-	:chmod $HELPMOD $DEST_AUTO/*.vim $DEST_AUTO/README.txt
+        :copy $AUTOSOURCE/*.vim $AUTOSOURCE/README.txt $DEST_AUTO
+        :chmod $HELPMOD $DEST_AUTO/*.vim $DEST_AUTO/README.txt
 # install the standard plugin files
-	:copy $PLUGSOURCE/*.vim $PLUGSOURCE/README.txt $DEST_PLUG
-	:chmod $HELPMOD $DEST_PLUG/*.vim $DEST_PLUG/README.txt
+        :copy $PLUGSOURCE/*.vim $PLUGSOURCE/README.txt $DEST_PLUG
+        :chmod $HELPMOD $DEST_PLUG/*.vim $DEST_PLUG/README.txt
 # install the ftplugin files
-	:copy $FTPLUGSOURCE/*.vim $FTPLUGSOURCE/README.txt $DEST_FTP
-	:chmod $HELPMOD $DEST_FTP/*.vim $DEST_FTP/README.txt
+        :copy $FTPLUGSOURCE/*.vim $FTPLUGSOURCE/README.txt $DEST_FTP
+        :chmod $HELPMOD $DEST_FTP/*.vim $DEST_FTP/README.txt
 # install the compiler files
-	:copy $COMPSOURCE/*.vim $COMPSOURCE/README.txt $DEST_COMP
-	:chmod $HELPMOD $DEST_COMP/*.vim $DEST_COMP/README.txt
+        :copy $COMPSOURCE/*.vim $COMPSOURCE/README.txt $DEST_COMP
+        :chmod $HELPMOD $DEST_COMP/*.vim $DEST_COMP/README.txt
 
 installmacros {virtual}{force}: $MACROSOURCE $DEST_VIM $DEST_RT $DEST_MACRO
-	:copy {recursive}{force} $MACROSOURCE/* $DEST_MACRO
-	# Delete any CVS and AAPDIR directories.
-	# Use the ":tree" command if possible.  It was added later, fall back
-	# to using "find" when it doesn't work.
-	@try:
-	   :tree $DEST_MACRO {dirname = CVS}
-	      :del {recursive} $name
-	   :tree $DEST_MACRO {dirname = AAPDIR}
-	      :del {recursive} $name
-	   :tree $DEST_MACRO {dirname = .*}
-	      :chmod $DIRMOD $name
-	   :tree $DEST_MACRO {filename = .*}
-	      :chmod $FILEMOD $name
-	@except:
-	@  ok, cvsdirs = redir_system('find %s -name CVS -print' % _no.DEST_MACRO)
-	@  if ok and cvsdirs:
-	     :del {recursive} $cvsdirs
-	   :sys chmod $DIRMOD ``find $DEST_MACRO -type d -print``
-	   :sys chmod $FILEMOD ``find $DEST_MACRO -type f -print``
-	:chmod $SCRIPTMOD $DEST_MACRO/less.sh
+        :copy {recursive}{force} $MACROSOURCE/* $DEST_MACRO
+        # Delete any CVS and AAPDIR directories.
+        # Use the ":tree" command if possible.  It was added later, fall back
+        # to using "find" when it doesn't work.
+        @try:
+           :tree $DEST_MACRO {dirname = CVS}
+              :del {recursive} $name
+           :tree $DEST_MACRO {dirname = AAPDIR}
+              :del {recursive} $name
+           :tree $DEST_MACRO {dirname = .*}
+              :chmod $DIRMOD $name
+           :tree $DEST_MACRO {filename = .*}
+              :chmod $FILEMOD $name
+        @except:
+        @  ok, cvsdirs = redir_system('find %s -name CVS -print' % _no.DEST_MACRO)
+        @  if ok and cvsdirs:
+             :del {recursive} $cvsdirs
+           :sys chmod $DIRMOD ``find $DEST_MACRO -type d -print``
+           :sys chmod $FILEMOD ``find $DEST_MACRO -type f -print``
+        :chmod $SCRIPTMOD $DEST_MACRO/less.sh
 
 # install the tutor files
 installtutor {virtual}{force}: $TUTORSOURCE $DEST_VIM $DEST_RT $DEST_TUTOR
-	:copy vimtutor $DEST_BIN/$(VIMNAME)tutor
-	:chmod $SCRIPTMOD $DEST_BIN/$(VIMNAME)tutor
-	:copy $TUTORSOURCE/tutor* $TUTORSOURCE/README* $DEST_TUTOR
-	:chmod $HELPMOD $DEST_TUTOR/*
+        :copy vimtutor $DEST_BIN/$(VIMNAME)tutor
+        :chmod $SCRIPTMOD $DEST_BIN/$(VIMNAME)tutor
+        :copy $TUTORSOURCE/tutor* $TUTORSOURCE/README* $DEST_TUTOR
+        :chmod $HELPMOD $DEST_TUTOR/*
 
 # install helper program xxd
 installtools {virtual}{force}: $TOOLS $DEST_BIN $DEST_MAN \
-		$TOOLSSOURCE $DEST_VIM $DEST_RT $DEST_TOOLS
-	xxd = $DEST_BIN/xxd$EXESUF
-	@if os.path.exists(xxd):
-	  :move {force} $xxd $(xxd).rm
-	  :del $(xxd).rm
-	:copy xxd/xxd$EXESUF $DEST_BIN
-	:do strip $DEST_BIN/xxd$EXESUF
-	:chmod $BINMOD $DEST_BIN/xxd$EXESUF
-	:copy $HELPSOURCE/xxd.1 $DEST_MAN
-	:chmod $MANMOD $DEST_MAN/xxd.1
+                $TOOLSSOURCE $DEST_VIM $DEST_RT $DEST_TOOLS
+        xxd = $DEST_BIN/xxd$EXESUF
+        @if os.path.exists(xxd):
+          :move {force} $xxd $(xxd).rm
+          :del $(xxd).rm
+        :copy xxd/xxd$EXESUF $DEST_BIN
+        :do strip $DEST_BIN/xxd$EXESUF
+        :chmod $BINMOD $DEST_BIN/xxd$EXESUF
+        :copy $HELPSOURCE/xxd.1 $DEST_MAN
+        :chmod $MANMOD $DEST_MAN/xxd.1
 # install the runtime tools
-	@try:
-	@  if aap_has(":tree"):
-	      # New method: copy everything and delete CVS and AAPDIR dirs
-	      :copy {recursive} $TOOLSSOURCE/* $DEST_TOOLS
-	      :tree $DEST_TOOLS {dirname = CVS}
-		 :delete {recursive} $name
-	      :tree $DEST_TOOLS {dirname = AAPDIR}
-		 :delete {recursive} $name
-	@except:
-	    # Old method: copy only specific files and directories.
-	    :copy {recursive} $TOOLSSOURCE/README.txt $TOOLSSOURCE/[a-z]* $DEST_TOOLS
-	:chmod $FILEMOD $DEST_TOOLS/*
+        @try:
+        @  if aap_has(":tree"):
+              # New method: copy everything and delete CVS and AAPDIR dirs
+              :copy {recursive} $TOOLSSOURCE/* $DEST_TOOLS
+              :tree $DEST_TOOLS {dirname = CVS}
+                 :delete {recursive} $name
+              :tree $DEST_TOOLS {dirname = AAPDIR}
+                 :delete {recursive} $name
+        @except:
+            # Old method: copy only specific files and directories.
+            :copy {recursive} $TOOLSSOURCE/README.txt $TOOLSSOURCE/[a-z]* $DEST_TOOLS
+        :chmod $FILEMOD $DEST_TOOLS/*
 # replace the path in some tools
-	:progsearch perlpath perl
-	@if perlpath:
-	    :cat $TOOLSSOURCE/efm_perl.pl |
-		    :eval re.sub("/usr/bin/perl", perlpath, stdin)
-		    >! $DEST_TOOLS/efm_perl.pl
-	@else:
-	    :copy $TOOLSSOURCE/efm_perl.pl $DEST_TOOLS
+        :progsearch perlpath perl
+        @if perlpath:
+            :cat $TOOLSSOURCE/efm_perl.pl |
+                    :eval re.sub("/usr/bin/perl", perlpath, stdin)
+                    >! $DEST_TOOLS/efm_perl.pl
+        @else:
+            :copy $TOOLSSOURCE/efm_perl.pl $DEST_TOOLS
 
-	:progsearch awkpath nawk gawk awk
-	@if awkpath:
-	    :cat $TOOLSSOURCE/mve.awk |
-		    :eval re.sub("/usr/bin/nawk", awkpath, stdin)
-		    >! $DEST_TOOLS/mve.awk
-	@else:
-	    :copy $TOOLSSOURCE/mve.awk $DEST_TOOLS
+        :progsearch awkpath nawk gawk awk
+        @if awkpath:
+            :cat $TOOLSSOURCE/mve.awk |
+                    :eval re.sub("/usr/bin/nawk", awkpath, stdin)
+                    >! $DEST_TOOLS/mve.awk
+        @else:
+            :copy $TOOLSSOURCE/mve.awk $DEST_TOOLS
 
-	:sys chmod $SCRIPTMOD ``grep -l "^#!" $DEST_TOOLS/*``
+        :sys chmod $SCRIPTMOD ``grep -l "^#!" $DEST_TOOLS/*``
 
 # install the language specific files, if they were unpacked
 install-languages {virtual}{force}: languages $DEST_LANG $DEST_KMAP
-	@if _no.MAKEMO:
-	   :sys cd $PODIR; $MAKE prefix=$DESTDIR$prefix \
-		    LOCALEDIR=$DEST_LANG INSTALL_DATA=cp FILEMOD=$FILEMOD install
-	@if os.path.exists(_no.LANGSOURCE):
-	   :print installing language files
-	   :copy $LANGSOURCE/README.txt $LANGSOURCE/*.vim $DEST_LANG
-	   :chmod $FILEMOD $DEST_LANG/*.vim
-	@if os.path.exists(_no.KMAPSOURCE):
-	   :copy $KMAPSOURCE/README.txt $KMAPSOURCE/*.vim $DEST_KMAP
-	   :chmod $FILEMOD $DEST_KMAP/*.vim
+        @if _no.MAKEMO:
+           :sys cd $PODIR; $MAKE prefix=$DESTDIR$prefix \
+                    LOCALEDIR=$DEST_LANG INSTALL_DATA=cp FILEMOD=$FILEMOD install
+        @if os.path.exists(_no.LANGSOURCE):
+           :print installing language files
+           :copy $LANGSOURCE/README.txt $LANGSOURCE/*.vim $DEST_LANG
+           :chmod $FILEMOD $DEST_LANG/*.vim
+        @if os.path.exists(_no.KMAPSOURCE):
+           :copy $KMAPSOURCE/README.txt $KMAPSOURCE/*.vim $DEST_KMAP
+           :chmod $FILEMOD $DEST_KMAP/*.vim
 
 # Install the icons for the KDE GUI.  This differs from the KDE icons for
 # other GUIs.
@@ -890,38 +890,38 @@
 ICON16PATH = $DESTDIR$DATADIR/icons/locolor/16x16/apps
 KDEPATH = $HOME/.kde/share/icons
 install-icons {virtual}:
-	gp = $ICON48PATH/gvim.png
-	@if os.path.isdir(_no.ICON48PATH) and not os.path.exists(gp):
-	   :copy $SCRIPTSOURCE/vim48x48.png $gp
-	gp = $ICON32PATH/gvim.png
-	@if os.path.isdir(_no.ICON32PATH) and not os.path.exists(gp):
-	   :copy $SCRIPTSOURCE/vim32x32.png $gp
-	gp = $ICON16PATH/gvim.png
-	@if os.path.isdir(_no.ICON16PATH) and not os.path.exists(gp):
-	   :copy $SCRIPTSOURCE/vim16x16.png $gp
+        gp = $ICON48PATH/gvim.png
+        @if os.path.isdir(_no.ICON48PATH) and not os.path.exists(gp):
+           :copy $SCRIPTSOURCE/vim48x48.png $gp
+        gp = $ICON32PATH/gvim.png
+        @if os.path.isdir(_no.ICON32PATH) and not os.path.exists(gp):
+           :copy $SCRIPTSOURCE/vim32x32.png $gp
+        gp = $ICON16PATH/gvim.png
+        @if os.path.isdir(_no.ICON16PATH) and not os.path.exists(gp):
+           :copy $SCRIPTSOURCE/vim16x16.png $gp
 
 
 $HELPSOURCE/vim.1 $MACROSOURCE $TOOLSSOURCE:
-	@if not os.path.exists(_no.TOOLSSOURCE):
-	    :print Runtime files not found.
-	    :error You need to unpack the runtime archive before running "make install".
+        @if not os.path.exists(_no.TOOLSSOURCE):
+            :print Runtime files not found.
+            :error You need to unpack the runtime archive before running "make install".
 
 # create links from various names to vim.  This is only done when the links
 # (or executables with the same name) don't exist yet.
 installlinks {virtual}: $GUI_TARGETS \
-			$DEST_BIN/$EXTARGET \
-			$DEST_BIN/$VIEWTARGET \
-			$DEST_BIN/$RVIMTARGET \
-			$DEST_BIN/$RVIEWTARGET \
-			$INSTALLVIMDIFF
+                        $DEST_BIN/$EXTARGET \
+                        $DEST_BIN/$VIEWTARGET \
+                        $DEST_BIN/$RVIMTARGET \
+                        $DEST_BIN/$RVIEWTARGET \
+                        $INSTALLVIMDIFF
 
 installglinks {virtual}: $DEST_BIN/$GVIMTARGET \
-			$DEST_BIN/$GVIEWTARGET \
-			$DEST_BIN/$RGVIMTARGET \
-			$DEST_BIN/$RGVIEWTARGET \
-			$DEST_BIN/$EVIMTARGET \
-			$DEST_BIN/$EVIEWTARGET \
-			$INSTALLGVIMDIFF
+                        $DEST_BIN/$GVIEWTARGET \
+                        $DEST_BIN/$RGVIMTARGET \
+                        $DEST_BIN/$RGVIEWTARGET \
+                        $DEST_BIN/$EVIMTARGET \
+                        $DEST_BIN/$EVIEWTARGET \
+                        $INSTALLGVIMDIFF
 
 installvimdiff {virtual}: $DEST_BIN/$VIMDIFFTARGET
 installgvimdiff {virtual}: $DEST_BIN/$GVIMDIFFTARGET
@@ -964,20 +964,20 @@
 $DEST_BIN/$EVIEWTARGET: {buildcheck = }
     :sys cd $DEST_BIN; ln -s $VIMTARGET $EVIEWTARGET
 
-# create links for the manual pages with various names to vim.	This is only
+# create links for the manual pages with various names to vim.  This is only
 # done when the links (or manpages with the same name) don't exist yet.
 installhelplinks {virtual}: $GUI_MAN_TARGETS \
-			$DEST_MAN/$(EXNAME).1 \
-			$DEST_MAN/$(VIEWNAME).1 \
-			$DEST_MAN/$(RVIMNAME).1 \
-			$DEST_MAN/$(RVIEWNAME).1
+                        $DEST_MAN/$(EXNAME).1 \
+                        $DEST_MAN/$(VIEWNAME).1 \
+                        $DEST_MAN/$(RVIMNAME).1 \
+                        $DEST_MAN/$(RVIEWNAME).1
 
 installghelplinks {virtual}: $DEST_MAN/$(GVIMNAME).1 \
-			$DEST_MAN/$(GVIEWNAME).1 \
-			$DEST_MAN/$(RGVIMNAME).1 \
-			$DEST_MAN/$(RGVIEWNAME).1 \
-			$DEST_MAN/$(GVIMDIFFNAME).1 \
-			$DEST_MAN/$(EVIEWNAME).1
+                        $DEST_MAN/$(GVIEWNAME).1 \
+                        $DEST_MAN/$(RGVIMNAME).1 \
+                        $DEST_MAN/$(RGVIEWNAME).1 \
+                        $DEST_MAN/$(GVIMDIFFNAME).1 \
+                        $DEST_MAN/$(EVIEWNAME).1
 
 $DEST_MAN/$(EXNAME).1: {buildcheck = }
     :sys cd $DEST_MAN; ln -s $(VIMNAME).1 $(EXNAME).1
@@ -1056,11 +1056,11 @@
     :del {force} $DEST_AUTO/*.vim $DEST_AUTO/README.txt
     :del {force} $DEST_PLUG/*.vim $DEST_PLUG/README.txt
     :deldir {force} $DEST_FTP $DEST_AUTO $DEST_PLUG $DEST_PRINT $DEST_RT
-#	This will fail when other Vim versions are installed, no worries.
+#       This will fail when other Vim versions are installed, no worries.
     @try:
-	:deldir $DEST_VIM
+        :deldir $DEST_VIM
     @except:
-	:print Cannot delete $DEST_VIM
+        :print Cannot delete $DEST_VIM
 
 
 # vim: sts=4 sw=4 :
diff --git a/src/message.c b/src/message.c
index 6daa365..0a2fe99 100644
--- a/src/message.c
+++ b/src/message.c
@@ -3749,6 +3749,7 @@
 
 /*
  * Get string argument from "idxp" entry in "tvs".  First entry is 1.
+ * Returns NULL for an error.
  */
     static char *
 tv_str(tvs, idxp)
diff --git a/src/move.c b/src/move.c
index ac59320..c8a5a23 100644
--- a/src/move.c
+++ b/src/move.c
@@ -20,6 +20,7 @@
 #include "vim.h"
 
 static void comp_botline __ARGS((win_T *wp));
+static int scrolljump_value __ARGS((void));
 static int check_top_offset __ARGS((void));
 static void curs_rows __ARGS((win_T *wp, int do_botline));
 static void validate_botline_win __ARGS((win_T *wp));
@@ -249,7 +250,7 @@
 		scroll_cursor_halfway(FALSE);
 	    else
 	    {
-		scroll_cursor_top((int)p_sj, FALSE);
+		scroll_cursor_top(scrolljump_value(), FALSE);
 		check_botline = TRUE;
 	    }
 	}
@@ -341,7 +342,7 @@
 		    line_count = curwin->w_cursor.lnum - curwin->w_botline
 								   + 1 + p_so;
 		if (line_count <= curwin->w_height + 1)
-		    scroll_cursor_bot((int)p_sj, FALSE);
+		    scroll_cursor_bot(scrolljump_value(), FALSE);
 		else
 		    scroll_cursor_halfway(FALSE);
 	    }
@@ -377,6 +378,19 @@
 }
 
 /*
+ * Return the scrolljump value to use for the current window.
+ * When 'scrolljump' is positive use it as-is.
+ * When 'scrolljump' is negative use it as a percentage of the window height.
+ */
+    static int
+scrolljump_value()
+{
+    if (p_sj >= 0)
+	return (int)p_sj;
+    return (curwin->w_height * -p_sj) / 100;
+}
+
+/*
  * Return TRUE when there are not 'scrolloff' lines above the cursor for the
  * current window.
  */
diff --git a/src/option.c b/src/option.c
index 96d9df2..d547edc 100644
--- a/src/option.c
+++ b/src/option.c
@@ -7420,7 +7420,7 @@
 	errmsg = e_positive;
 	p_report = 1;
     }
-    if ((p_sj < 0 || p_sj >= Rows) && full_screen)
+    if ((p_sj < -100 || p_sj >= Rows) && full_screen)
     {
 	if (Rows != old_Rows)	/* Rows changed, just adjust p_sj */
 	    p_sj = Rows / 2;
diff --git a/src/quickfix.c b/src/quickfix.c
index 1133187..e1e0d16 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -2215,8 +2215,10 @@
     {
 	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
 					       curbuf->b_fname, TRUE, curbuf);
+# ifdef FEAT_EVAL
 	if (did_throw || force_abort)
 	    return;
+# endif
     }
 #endif
 
@@ -2974,6 +2976,7 @@
     }
 }
 
+#if defined(FEAT_EVAL) || defined(PROTO)
 /*
  * ":cexpr {expr}" command.
  */
@@ -2994,6 +2997,7 @@
 
     clear_tv(tv);
 }
+#endif
 
 /*
  * ":helpgrep {pattern}"
diff --git a/src/spell.c b/src/spell.c
index 2562e4b..53447af 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -511,15 +511,15 @@
 #define SCORE_RARE	180	/* rare word */
 #define SCORE_SWAP	90	/* swap two characters */
 #define SCORE_SWAP3	110	/* swap two characters in three */
-#define SCORE_REP	87	/* REP replacement */
+#define SCORE_REP	65	/* REP replacement */
 #define SCORE_SUBST	93	/* substitute a character */
 #define SCORE_SIMILAR	33	/* substitute a similar character */
 #define SCORE_SUBCOMP	33	/* substitute a composing character */
 #define SCORE_DEL	94	/* delete a character */
-#define SCORE_DELDUP	64	/* delete a duplicated character */
+#define SCORE_DELDUP	66	/* delete a duplicated character */
 #define SCORE_DELCOMP	28	/* delete a composing character */
 #define SCORE_INS	96	/* insert a character */
-#define SCORE_INSDUP	66	/* insert a duplicate character */
+#define SCORE_INSDUP	67	/* insert a duplicate character */
 #define SCORE_INSCOMP	30	/* insert a composing character */
 #define SCORE_NONWORD	103	/* change non-word to word char */
 
@@ -5049,7 +5049,17 @@
 		if (itemcnt > 3 && items[3][0] != '#')
 		    smsg((char_u *)_(e_afftrailing), fname, lnum, items[3]);
 		if (do_rep)
+		{
+		    /* Replace underscore with space (can't include a space
+		     * directly). */
+		    for (p = items[1]; *p != NUL; mb_ptr_adv(p))
+			if (*p == '_')
+			    *p = ' ';
+		    for (p = items[2]; *p != NUL; mb_ptr_adv(p))
+			if (*p == '_')
+			    *p = ' ';
 		    add_fromto(spin, &spin->si_rep, items[1], items[2]);
+		}
 	    }
 	    else if (STRCMP(items[0], "MAP") == 0 && itemcnt == 2)
 	    {
@@ -11081,13 +11091,21 @@
     int		had_bonus;	/* value for st_had_bonus */
     slang_T	*slang;		/* language for sound folding */
 {
+    int		goodlen = STRLEN(goodword);
     suggest_T   *stp;
     int		i;
     char_u	*p = NULL;
     int		c = 0;
+    int		attr = 0;
+    char_u	longword[MAXWLEN + 1];
 
-    /* Check that the word wasn't banned. */
-    if (was_banned(su, goodword))
+    /* Check that the word really is valid.  Esp. for banned words and for
+     * split words, such as "the the".  Need to append what follows to check
+     * for that. */
+    STRCPY(longword, goodword);
+    vim_strncpy(longword + goodlen, su->su_badptr + badlen, MAXWLEN - goodlen);
+    (void)spell_check(curwin, longword, &attr, NULL);
+    if (attr != 0)
 	return;
 
     /* If past "su_badlen" and the rest is identical stop at "su_badlen".
@@ -11097,7 +11115,7 @@
     {
 	/* This assumes there was no case folding or it didn't change the
 	 * length... */
-	p = goodword + STRLEN(goodword) - i;
+	p = goodword + goodlen - i;
 	if (p > goodword && STRNICMP(su->su_badptr + su->su_badlen, p, i) == 0)
 	{
 	    badlen = su->su_badlen;
@@ -11112,7 +11130,7 @@
 	/* When replacing part of the word check that we actually change
 	 * something.  For "the the" a suggestion can be replacing the first
 	 * "the" with itself, since "the" wasn't banned. */
-	if (badlen == (int)STRLEN(goodword)
+	if (badlen == (int)goodlen
 			    && STRNCMP(su->su_badword, goodword, badlen) == 0)
 	    return;
     }
diff --git a/src/testdir/test59.in b/src/testdir/test59.in
index a2dcc89..e3de1d6 100644
--- a/src/testdir/test59.in
+++ b/src/testdir/test59.in
@@ -33,7 +33,7 @@
   normal 0f:]s
   let prevbad = ''
   while 1
-    let bad = spellbadword()
+    let [bad, a] = spellbadword()
     if bad == '' || bad == prevbad || bad == 'badend'
       break
     endif
@@ -64,31 +64,31 @@
 :mkspell! Xtest.utf-8.add.spl Xtest.utf-8.add
 :set spellfile=Xtest.utf-8.add
 /^test2:
-]s:let str = spellbadword()
+]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_us.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_gb.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_nz.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :set spl=Xtest_ca.utf-8.spl
 /^test2:
-]smm:let str = spellbadword()
+]smm:let [str, a] = spellbadword()
 :$put =str
-`m]s:let str = spellbadword()
+`m]s:let [str, a] = spellbadword()
 :$put =str
 :"
 :" Postponed prefixes
diff --git a/src/version.h b/src/version.h
index 0cb24ad..cf19c79 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 20, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 25)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 25, compiled "
