changeset 25463:05f9e8f2016c v8.2.3268

patch 8.2.3268: cannot use a block with :autocmd like with :command Commit: https://github.com/vim/vim/commit/73b8b0ae3acac220e823076f8ca1c14524ed96dd Author: Bram Moolenaar <Bram@vim.org> Date: Sun Aug 1 14:52:32 2021 +0200 patch 8.2.3268: cannot use a block with :autocmd like with :command Problem: Cannot use a block with :autocmd like with :command. Solution: Add support for a {} block after :autocmd. (closes https://github.com/vim/vim/issues/8620)
author Bram Moolenaar <Bram@vim.org>
date Sun, 01 Aug 2021 15:00:05 +0200
parents 66d8f0116a76
children f0546dfb74e2
files runtime/doc/autocmd.txt runtime/doc/map.txt src/autocmd.c src/ex_docmd.c src/proto/autocmd.pro src/proto/usercmd.pro src/testdir/test_autocmd.vim src/usercmd.c src/version.c src/vim.h
diffstat 10 files changed, 84 insertions(+), 50 deletions(-) [+]
line wrap: on
line diff
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -76,6 +76,12 @@ and in a `:def` function) then {cmd} wil
 script.  Thus this depends on where the autocmd is defined, not where it is
 triggered.
 
+{cmd} can use a block, like with `:command`, see |:command-repl|.  Example: >
+	au BufReadPost *.xml {
+		  setlocal matchpairs+=<:>
+		  /<start
+		}
+
 Note: The ":autocmd" command can only be followed by another command when the
 '|' appears before {cmd}.  This works: >
 	:augroup mine | au! BufRead | augroup END
--- a/runtime/doc/map.txt
+++ b/runtime/doc/map.txt
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 8.2.  Last change: 2021 Jul 28
+*map.txt*       For Vim version 8.2.  Last change: 2021 Aug 01
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1571,7 +1571,7 @@ feature.  Use the full name for new scri
 
 
 Replacement text ~
-
+							*:command-repl*
 The {repl} argument is normally one long string, possibly with "|" separated
 commands.  A special case is when the argument is "{", then the following
 lines, up to a line starting with "}" are used and |Vim9| syntax applies.
@@ -1580,8 +1580,8 @@ Example: >
 		echo 'hello'
 		g:calledMyCommand = true
 	    }
-No nesting is supported.  Using `:normal` directly does not work, you can use
-it indirectly with `:execute`.
+No nesting is supported, inline functions cannot be used.  Using `:normal`
+directly does not work, you can use it indirectly with `:execute`.
 
 The replacement text {repl} for a user defined command is scanned for special
 escape sequences, using <...> notation.  Escape sequences are replaced with
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -258,7 +258,7 @@ static int au_need_clean = FALSE;   // n
 
 static char_u *event_nr2name(event_T event);
 static int au_get_grouparg(char_u **argp);
-static int do_autocmd_event(event_T event, char_u *pat, int once, int nested, char_u *cmd, int forceit, int group);
+static int do_autocmd_event(event_T event, char_u *pat, int once, int nested, char_u *cmd, int forceit, int group, int flags);
 static int apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap);
 static void auto_next_pat(AutoPatCmd *apc, int stop_at_last);
 static int au_find_group(char_u *name);
@@ -615,7 +615,7 @@ free_all_autocmds(void)
 
     for (current_augroup = -1; current_augroup < augroups.ga_len;
 							    ++current_augroup)
-	do_autocmd((char_u *)"", TRUE);
+	do_autocmd(NULL, (char_u *)"", TRUE);
 
     for (i = 0; i < augroups.ga_len; ++i)
     {
@@ -823,20 +823,23 @@ au_event_restore(char_u *old_ei)
  * :autocmd * *.c		show all autocommands for *.c files.
  *
  * Mostly a {group} argument can optionally appear before <event>.
+ * "eap" can be NULL.
  */
     void
-do_autocmd(char_u *arg_in, int forceit)
+do_autocmd(exarg_T *eap, char_u *arg_in, int forceit)
 {
     char_u	*arg = arg_in;
     char_u	*pat;
     char_u	*envpat = NULL;
     char_u	*cmd;
+    int		cmd_need_free = FALSE;
     event_T	event;
-    int		need_free = FALSE;
+    char_u	*tofree = NULL;
     int		nested = FALSE;
     int		once = FALSE;
     int		group;
     int		i;
+    int		flags = 0;
 
     if (*arg == '|')
     {
@@ -935,10 +938,14 @@ do_autocmd(char_u *arg_in, int forceit)
 	 */
 	if (*cmd != NUL)
 	{
+	    if (eap != NULL)
+		// Read a {} block if it follows.
+		cmd = may_get_cmd_block(eap, cmd, &tofree, &flags);
+
 	    cmd = expand_sfile(cmd);
 	    if (cmd == NULL)	    // some error
 		return;
-	    need_free = TRUE;
+	    cmd_need_free = TRUE;
 	}
     }
 
@@ -962,19 +969,20 @@ do_autocmd(char_u *arg_in, int forceit)
 	    for (event = (event_T)0; (int)event < (int)NUM_EVENTS;
 					     event = (event_T)((int)event + 1))
 		if (do_autocmd_event(event, pat,
-				    once, nested, cmd, forceit, group) == FAIL)
+			     once, nested, cmd, forceit, group, flags) == FAIL)
 		    break;
     }
     else
     {
 	while (*arg && *arg != '|' && !VIM_ISWHITE(*arg))
 	    if (do_autocmd_event(event_name2nr(arg, &arg), pat,
-				 once, nested,	cmd, forceit, group) == FAIL)
+			  once, nested,	cmd, forceit, group, flags) == FAIL)
 		break;
     }
 
-    if (need_free)
+    if (cmd_need_free)
 	vim_free(cmd);
+    vim_free(tofree);
     vim_free(envpat);
 }
 
@@ -1024,7 +1032,8 @@ do_autocmd_event(
     int		nested,
     char_u	*cmd,
     int		forceit,
-    int		group)
+    int		group,
+    int		flags)
 {
     AutoPat	*ap;
     AutoPat	**prev_ap;
@@ -1251,6 +1260,8 @@ do_autocmd_event(
 		return FAIL;
 	    ac->cmd = vim_strsave(cmd);
 	    ac->script_ctx = current_sctx;
+	    if (flags & UC_VIM9)
+		ac->script_ctx.sc_version = SCRIPT_VERSION_VIM9;
 #ifdef FEAT_EVAL
 	    ac->script_ctx.sc_lnum += SOURCING_LNUM;
 #endif
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -5203,7 +5203,7 @@ ex_autocmd(exarg_T *eap)
 	      _(e_command_not_allowed_from_vimrc_in_current_dir_or_tag_search);
     }
     else if (eap->cmdidx == CMD_autocmd)
-	do_autocmd(eap->arg, eap->forceit);
+	do_autocmd(eap, eap->arg, eap->forceit);
     else
 	do_augroup(eap->arg, eap->forceit);
 }
--- a/src/proto/autocmd.pro
+++ b/src/proto/autocmd.pro
@@ -6,7 +6,7 @@ void free_all_autocmds(void);
 int check_ei(void);
 char_u *au_event_disable(char *what);
 void au_event_restore(char_u *old_ei);
-void do_autocmd(char_u *arg_in, int forceit);
+void do_autocmd(exarg_T *eap, char_u *arg_in, int forceit);
 int do_doautocmd(char_u *arg, int do_msg, int *did_something);
 void ex_doautoall(exarg_T *eap);
 int check_nomodeline(char_u **argp);
--- a/src/proto/usercmd.pro
+++ b/src/proto/usercmd.pro
@@ -10,6 +10,7 @@ char_u *get_user_cmd_complete(expand_T *
 int cmdcomplete_str_to_type(char_u *complete_str);
 char *uc_fun_cmd(void);
 int parse_compl_arg(char_u *value, int vallen, int *complp, long *argt, char_u **compl_arg);
+char_u *may_get_cmd_block(exarg_T *eap, char_u *p, char_u **tofree, int *flags);
 void ex_command(exarg_T *eap);
 void ex_comclear(exarg_T *eap);
 void uc_clear(garray_T *gap);
index 8abf911fa8cb7f0bfb4e3ff7a70455d901cf232a..4a7dd60f6d8be52764a635a738a022c59a6036f5
GIT binary patch
literal 84099
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
--- a/src/usercmd.c
+++ b/src/usercmd.c
@@ -114,9 +114,6 @@ static struct
     {ADDR_NONE, NULL, NULL}
 };
 
-#define UC_BUFFER	1	// -buffer: local to current buffer
-#define UC_VIM9		2	// {} argument: Vim9 syntax.
-
 /*
  * Search for a user command that matches "eap->cmd".
  * Return cmdidx in "eap->cmdidx", flags in "eap->argt", idx in "eap->useridx".
@@ -975,6 +972,49 @@ fail:
 }
 
 /*
+ * If "p" starts with "{" then read a block of commands until "}".
+ * Used for ":command" and ":autocmd".
+ */
+    char_u *
+may_get_cmd_block(exarg_T *eap, char_u *p, char_u **tofree, int *flags)
+{
+    char_u *retp = p;
+
+    if (*p == '{' && ends_excmd2(eap->arg, skipwhite(p + 1))
+						       && eap->getline != NULL)
+    {
+	garray_T	ga;
+	char_u	*line = NULL;
+
+	ga_init2(&ga, sizeof(char_u *), 10);
+	if (ga_add_string(&ga, p) == FAIL)
+	    return retp;
+
+	// Read lines between '{' and '}'.  Does not support nesting or
+	// here-doc constructs.
+	for (;;)
+	{
+	    vim_free(line);
+	    if ((line = eap->getline(':', eap->cookie,
+				       0, GETLINE_CONCAT_CONTBAR)) == NULL)
+	    {
+		emsg(_(e_missing_rcurly));
+		break;
+	    }
+	    if (ga_add_string(&ga, line) == FAIL)
+		break;
+	    if (*skipwhite(line) == '}')
+		break;
+	}
+	vim_free(line);
+	retp = *tofree = ga_concat_strings(&ga, "\n");
+	ga_clear_strings(&ga);
+	*flags |= UC_VIM9;
+    }
+    return retp;
+}
+
+/*
  * ":command ..." implementation
  */
     void
@@ -1043,38 +1083,7 @@ ex_command(exarg_T *eap)
     {
 	char_u *tofree = NULL;
 
-	if (*p == '{' && ends_excmd2(eap->arg, skipwhite(p + 1))
-						       && eap->getline != NULL)
-	{
-	    garray_T	ga;
-	    char_u	*line = NULL;
-
-	    ga_init2(&ga, sizeof(char_u *), 10);
-	    if (ga_add_string(&ga, p) == FAIL)
-		return;
-
-	    // Read lines between '{' and '}'.  Does not support nesting or
-	    // here-doc constructs.
-	    //
-	    for (;;)
-	    {
-		vim_free(line);
-		if ((line = eap->getline(':', eap->cookie,
-					   0, GETLINE_CONCAT_CONTBAR)) == NULL)
-		{
-		    emsg(_(e_missing_rcurly));
-		    break;
-		}
-		if (ga_add_string(&ga, line) == FAIL)
-		    break;
-		if (*skipwhite(line) == '}')
-		    break;
-	    }
-	    vim_free(line);
-	    p = tofree = ga_concat_strings(&ga, "\n");
-	    ga_clear_strings(&ga);
-	    flags |= UC_VIM9;
-	}
+	p = may_get_cmd_block(eap, p, &tofree, &flags);
 
 	uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
 						  addr_type_arg, eap->forceit);
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3268,
+/**/
     3267,
 /**/
     3266,
--- a/src/vim.h
+++ b/src/vim.h
@@ -2739,4 +2739,9 @@ long elapsed(DWORD start_tick);
 // flags for equal_type()
 #define ETYPE_ARG_UNKNOWN 1
 
+// flags used by user commands and :autocmd
+#define UC_BUFFER	1	// -buffer: local to current buffer
+#define UC_VIM9		2	// {} argument: Vim9 syntax.
+
+
 #endif // VIM__H