diff -r 18ac5e368ce7 runtime/doc/autocmd.txt
--- a/runtime/doc/autocmd.txt	Sun Feb 12 01:55:55 2012 +0100
+++ b/runtime/doc/autocmd.txt	Sun Feb 12 10:37:49 2012 +0900
@@ -1053,7 +1053,7 @@
 option will not cause any commands to be executed.
 
 					*:do* *:doau* *:doautocmd* *E217*
-:do[autocmd] [group] {event} [fname]
+:do[autocmd] [<nomodeline>] [group] {event} [fname]
 			Apply the autocommands matching [fname] (default:
 			current file name) for {event} to the current buffer.
 			You can use this when the current file name does not
@@ -1072,6 +1072,14 @@
 			argument is included, Vim executes only the matching
 			autocommands for that group.  Note: if you use an
 			undefined group name, Vim gives you an error message.
+							*<nomodeline>*
+			After applying the autocommands the modelines are
+			processed, so that their settings overrule the
+			settings from autocommands, like what happens when
+			editing a file.  It is useful to execute autocommands
+			for loading the buffer, but this behavior might be
+			harmful for other use such as |User|.  You can use
+			<nomodeline> to skip processing the modelines.
 
 						*:doautoa* *:doautoall*
 :doautoa[ll] [<nomodeline>] [group] {event} [fname]
@@ -1085,12 +1093,6 @@
 			This command is intended for autocommands that set
 			options, change highlighting, and things like that.
 
-			After applying the autocommands the modelines are
-			processed, so that their settings overrule the
-			settings from autocommands, like what happens when
-			editing a file. This is skipped when the <nomodeline>
-			argument is present.
-
 ==============================================================================
 10. Using autocommands					*autocmd-use*
 
diff -r 18ac5e368ce7 src/ex_docmd.c
--- a/src/ex_docmd.c	Sun Feb 12 01:55:55 2012 +0100
+++ b/src/ex_docmd.c	Sun Feb 12 10:37:49 2012 +0900
@@ -4982,8 +4982,19 @@
 ex_doautocmd(eap)
     exarg_T	*eap;
 {
-    (void)do_doautocmd(eap->arg, TRUE);
-    do_modelines(0);
+    char_u	*arg = eap->arg;
+    int		call_do_modelines = TRUE;
+
+    if (STRNCMP(arg, "<nomodeline>", 12) == 0)
+    {
+        call_do_modelines = FALSE;
+        arg = skipwhite(arg + 12);
+    }
+
+    (void)do_doautocmd(arg, TRUE);
+
+    if (call_do_modelines)
+        do_modelines(0);
 }
 #endif
 
