@@ -8138,8 +8138,8 @@ event_name2nr(char_u *start, char_u **end)
81388138 int i ;
81398139 int len ;
81408140
8141- /* the event name ends with end of line, a blank or a comma */
8142- for (p = start ; * p && !vim_iswhite (* p ) && * p != ',' ; ++ p )
8141+ /* the event name ends with end of line, '|', a blank or a comma */
8142+ for (p = start ; * p && !vim_iswhite (* p ) && * p != ',' && * p != '|' ; ++ p )
81438143 ;
81448144 for (i = 0 ; event_names [i ].name != NULL ; ++ i )
81458145 {
@@ -8191,7 +8191,7 @@ find_end_event(
81918191 }
81928192 else
81938193 {
8194- for (pat = arg ; * pat && !vim_iswhite (* pat ); pat = p )
8194+ for (pat = arg ; * pat && * pat != '|' && !vim_iswhite (* pat ); pat = p )
81958195 {
81968196 if ((int )event_name2nr (pat , & p ) >= (int )NUM_EVENTS )
81978197 {
@@ -8324,8 +8324,9 @@ au_event_restore(char_u *old_ei)
83248324 * Mostly a {group} argument can optionally appear before <event>.
83258325 */
83268326 void
8327- do_autocmd (char_u * arg , int forceit )
8327+ do_autocmd (char_u * arg_in , int forceit )
83288328{
8329+ char_u * arg = arg_in ;
83298330 char_u * pat ;
83308331 char_u * envpat = NULL ;
83318332 char_u * cmd ;
@@ -8334,12 +8335,20 @@ do_autocmd(char_u *arg, int forceit)
83348335 int nested = FALSE;
83358336 int group ;
83368337
8337- /*
8338- * Check for a legal group name. If not, use AUGROUP_ALL.
8339- */
8340- group = au_get_grouparg (& arg );
8341- if (arg == NULL ) /* out of memory */
8342- return ;
8338+ if (* arg == '|' )
8339+ {
8340+ arg = (char_u * )"" ;
8341+ group = AUGROUP_ALL ; /* no argument, use all groups */
8342+ }
8343+ else
8344+ {
8345+ /*
8346+ * Check for a legal group name. If not, use AUGROUP_ALL.
8347+ */
8348+ group = au_get_grouparg (& arg );
8349+ if (arg == NULL ) /* out of memory */
8350+ return ;
8351+ }
83438352
83448353 /*
83458354 * Scan over the events.
@@ -8349,53 +8358,61 @@ do_autocmd(char_u *arg, int forceit)
83498358 if (pat == NULL )
83508359 return ;
83518360
8352- /*
8353- * Scan over the pattern. Put a NUL at the end.
8354- */
83558361 pat = skipwhite (pat );
8356- cmd = pat ;
8357- while (* cmd && (!vim_iswhite (* cmd ) || cmd [-1 ] == '\\' ))
8358- cmd ++ ;
8359- if (* cmd )
8360- * cmd ++ = NUL ;
8361-
8362- /* Expand environment variables in the pattern. Set 'shellslash', we want
8363- * forward slashes here. */
8364- if (vim_strchr (pat , '$' ) != NULL || vim_strchr (pat , '~' ) != NULL )
8362+ if (* pat == '|' )
83658363 {
8364+ pat = (char_u * )"" ;
8365+ cmd = (char_u * )"" ;
8366+ }
8367+ else
8368+ {
8369+ /*
8370+ * Scan over the pattern. Put a NUL at the end.
8371+ */
8372+ cmd = pat ;
8373+ while (* cmd && (!vim_iswhite (* cmd ) || cmd [-1 ] == '\\' ))
8374+ cmd ++ ;
8375+ if (* cmd )
8376+ * cmd ++ = NUL ;
8377+
8378+ /* Expand environment variables in the pattern. Set 'shellslash', we want
8379+ * forward slashes here. */
8380+ if (vim_strchr (pat , '$' ) != NULL || vim_strchr (pat , '~' ) != NULL )
8381+ {
83668382#ifdef BACKSLASH_IN_FILENAME
8367- int p_ssl_save = p_ssl ;
8383+ int p_ssl_save = p_ssl ;
83688384
8369- p_ssl = TRUE;
8385+ p_ssl = TRUE;
83708386#endif
8371- envpat = expand_env_save (pat );
8387+ envpat = expand_env_save (pat );
83728388#ifdef BACKSLASH_IN_FILENAME
8373- p_ssl = p_ssl_save ;
8389+ p_ssl = p_ssl_save ;
83748390#endif
8375- if (envpat != NULL )
8376- pat = envpat ;
8377- }
8391+ if (envpat != NULL )
8392+ pat = envpat ;
8393+ }
83788394
8379- /*
8380- * Check for "nested" flag.
8381- */
8382- cmd = skipwhite (cmd );
8383- if (* cmd != NUL && STRNCMP (cmd , "nested" , 6 ) == 0 && vim_iswhite (cmd [6 ]))
8384- {
8385- nested = TRUE;
8386- cmd = skipwhite (cmd + 6 );
8387- }
8395+ /*
8396+ * Check for "nested" flag.
8397+ */
8398+ cmd = skipwhite (cmd );
8399+ if (* cmd != NUL && STRNCMP (cmd , "nested" , 6 ) == 0 && vim_iswhite (cmd [6 ]))
8400+ {
8401+ nested = TRUE;
8402+ cmd = skipwhite (cmd + 6 );
8403+ }
83888404
8389- /*
8390- * Find the start of the commands.
8391- * Expand <sfile> in it.
8392- */
8393- if (* cmd != NUL )
8394- {
8395- cmd = expand_sfile (cmd );
8396- if (cmd == NULL ) /* some error */
8397- return ;
8398- need_free = TRUE;
8405+ /*
8406+ * Find the start of the commands.
8407+ * Expand <sfile> in it.
8408+ */
8409+ if (* cmd != NUL )
8410+ {
8411+ cmd = expand_sfile (cmd );
8412+ if (cmd == NULL ) /* some error */
8413+ return ;
8414+ need_free = TRUE;
8415+ }
83998416 }
84008417
84018418 /*
@@ -8412,7 +8429,7 @@ do_autocmd(char_u *arg, int forceit)
84128429 */
84138430 last_event = (event_T )- 1 ; /* for listing the event name */
84148431 last_group = AUGROUP_ERROR ; /* for listing the group name */
8415- if (* arg == '*' || * arg == NUL )
8432+ if (* arg == '*' || * arg == NUL || * arg == '|' )
84168433 {
84178434 for (event = (event_T )0 ; (int )event < (int )NUM_EVENTS ;
84188435 event = (event_T )((int )event + 1 ))
@@ -8422,7 +8439,7 @@ do_autocmd(char_u *arg, int forceit)
84228439 }
84238440 else
84248441 {
8425- while (* arg && !vim_iswhite (* arg ))
8442+ while (* arg && * arg != '|' && !vim_iswhite (* arg ))
84268443 if (do_autocmd_event (event_name2nr (arg , & arg ), pat ,
84278444 nested , cmd , forceit , group ) == FAIL )
84288445 break ;
@@ -8447,7 +8464,8 @@ au_get_grouparg(char_u **argp)
84478464 char_u * arg = * argp ;
84488465 int group = AUGROUP_ALL ;
84498466
8450- p = skiptowhite (arg );
8467+ for (p = arg ; * p && !vim_iswhite (* p ) && * p != '|' ; ++ p )
8468+ ;
84518469 if (p > arg )
84528470 {
84538471 group_name = vim_strnsave (arg , (int )(p - arg ));
0 commit comments