mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.2.3271: Vim9: cannot use :command or :au with block in :def function
Problem: Vim9: cannot use :command or :au with a block in a :def function. Solution: Recognize the start of the block.
This commit is contained in:
@@ -983,29 +983,32 @@ may_get_cmd_block(exarg_T *eap, char_u *p, char_u **tofree, int *flags)
|
||||
if (*p == '{' && ends_excmd2(eap->arg, skipwhite(p + 1))
|
||||
&& eap->getline != NULL)
|
||||
{
|
||||
garray_T ga;
|
||||
char_u *line = 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)
|
||||
// If the argument ends in "}" it must have been concatenated already
|
||||
// for ISN_EXEC.
|
||||
if (p[STRLEN(p) - 1] != '}')
|
||||
// Read lines between '{' and '}'. Does not support nesting or
|
||||
// here-doc constructs.
|
||||
for (;;)
|
||||
{
|
||||
emsg(_(e_missing_rcurly));
|
||||
break;
|
||||
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;
|
||||
}
|
||||
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);
|
||||
|
Reference in New Issue
Block a user