updated for version 7.0066
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 5f79af9..76fafef 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -223,6 +223,9 @@
 #ifndef FEAT_SYN_HL
 # define ex_syntax		ex_ni
 #endif
+#if !defined(FEAT_SYN_HL) || !defined(FEAT_MBYTE)
+# define ex_mkspell		ex_ni
+#endif
 #ifndef FEAT_MZSCHEME
 # define ex_mzscheme		ex_script_ni
 # define ex_mzfile		ex_ni
@@ -4149,11 +4152,11 @@
 
 	/* For a shell command a '!' must be escaped. */
 	if ((eap->usefilter || eap->cmdidx == CMD_bang)
-		&& vim_strchr(repl, '!') != NULL)
+					&& vim_strpbrk(repl, "!&;()") != NULL)
 	{
 	    char_u	*l;
 
-	    l = vim_strsave_escaped(repl, (char_u *)"!");
+	    l = vim_strsave_escaped(repl, (char_u *)"!&;()");
 	    if (l != NULL)
 	    {
 		vim_free(repl);
@@ -7328,7 +7331,8 @@
 ex_sleep(eap)
     exarg_T	*eap;
 {
-    int	    n;
+    int		n;
+    long	len;
 
     if (cursor_valid())
     {
@@ -7336,7 +7340,15 @@
 	if (n >= 0)
 	    windgoto((int)n, curwin->w_wcol);
     }
-    do_sleep(eap->line2 * (*eap->arg == 'm' ? 1L : 1000L));
+
+    len = eap->line2;
+    switch (*eap->arg)
+    {
+	case 'm': break;
+	case NUL: len *= 1000L; break;
+	default: EMSG2(_(e_invarg2), eap->arg); return;
+    }
+    do_sleep(len);
 }
 
 /*