mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.0.0283: cannot complete "syn list @cluster"
Problem: Cannot complete "syn list @cluster". Solution: Recognize and handle "list @". (Björn Linse, closes #10990)
This commit is contained in:
30
src/syntax.c
30
src/syntax.c
@@ -6341,7 +6341,8 @@ static enum
|
|||||||
EXP_SUBCMD, // expand ":syn" sub-commands
|
EXP_SUBCMD, // expand ":syn" sub-commands
|
||||||
EXP_CASE, // expand ":syn case" arguments
|
EXP_CASE, // expand ":syn case" arguments
|
||||||
EXP_SPELL, // expand ":syn spell" arguments
|
EXP_SPELL, // expand ":syn spell" arguments
|
||||||
EXP_SYNC // expand ":syn sync" arguments
|
EXP_SYNC, // expand ":syn sync" arguments
|
||||||
|
EXP_CLUSTER // expand ":syn list @cluster" arguments
|
||||||
} expand_what;
|
} expand_what;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -6396,10 +6397,17 @@ set_context_in_syntax_cmd(expand_T *xp, char_u *arg)
|
|||||||
expand_what = EXP_SPELL;
|
expand_what = EXP_SPELL;
|
||||||
else if (STRNICMP(arg, "sync", p - arg) == 0)
|
else if (STRNICMP(arg, "sync", p - arg) == 0)
|
||||||
expand_what = EXP_SYNC;
|
expand_what = EXP_SYNC;
|
||||||
else if ( STRNICMP(arg, "keyword", p - arg) == 0
|
else if (STRNICMP(arg, "list", p - arg) == 0)
|
||||||
|
{
|
||||||
|
p = skipwhite(p);
|
||||||
|
if (*p == '@')
|
||||||
|
expand_what = EXP_CLUSTER;
|
||||||
|
else
|
||||||
|
xp->xp_context = EXPAND_HIGHLIGHT;
|
||||||
|
}
|
||||||
|
else if (STRNICMP(arg, "keyword", p - arg) == 0
|
||||||
|| STRNICMP(arg, "region", p - arg) == 0
|
|| STRNICMP(arg, "region", p - arg) == 0
|
||||||
|| STRNICMP(arg, "match", p - arg) == 0
|
|| STRNICMP(arg, "match", p - arg) == 0)
|
||||||
|| STRNICMP(arg, "list", p - arg) == 0)
|
|
||||||
xp->xp_context = EXPAND_HIGHLIGHT;
|
xp->xp_context = EXPAND_HIGHLIGHT;
|
||||||
else
|
else
|
||||||
xp->xp_context = EXPAND_NOTHING;
|
xp->xp_context = EXPAND_NOTHING;
|
||||||
@@ -6414,6 +6422,9 @@ set_context_in_syntax_cmd(expand_T *xp, char_u *arg)
|
|||||||
char_u *
|
char_u *
|
||||||
get_syntax_name(expand_T *xp UNUSED, int idx)
|
get_syntax_name(expand_T *xp UNUSED, int idx)
|
||||||
{
|
{
|
||||||
|
#define CBUFFER_LEN 256
|
||||||
|
static char_u cbuffer[CBUFFER_LEN]; // TODO: better solution
|
||||||
|
|
||||||
switch (expand_what)
|
switch (expand_what)
|
||||||
{
|
{
|
||||||
case EXP_SUBCMD:
|
case EXP_SUBCMD:
|
||||||
@@ -6437,6 +6448,17 @@ get_syntax_name(expand_T *xp UNUSED, int idx)
|
|||||||
"maxlines=", "minlines=", "region", NULL};
|
"maxlines=", "minlines=", "region", NULL};
|
||||||
return (char_u *)sync_args[idx];
|
return (char_u *)sync_args[idx];
|
||||||
}
|
}
|
||||||
|
case EXP_CLUSTER:
|
||||||
|
{
|
||||||
|
if (idx < curwin->w_s->b_syn_clusters.ga_len)
|
||||||
|
{
|
||||||
|
vim_snprintf((char *)cbuffer, CBUFFER_LEN, "@%s",
|
||||||
|
SYN_CLSTR(curwin->w_s)[idx].scl_name);
|
||||||
|
return cbuffer;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@@ -201,6 +201,10 @@ func Test_syntax_completion()
|
|||||||
|
|
||||||
call feedkeys(":syn match \<C-A>\<C-B>\"\<CR>", 'tx')
|
call feedkeys(":syn match \<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
call assert_match('^"syn match Boolean Character ', @:)
|
call assert_match('^"syn match Boolean Character ', @:)
|
||||||
|
|
||||||
|
syn cluster Aax contains=Aap
|
||||||
|
call feedkeys(":syn list @A\<C-A>\<C-B>\"\<CR>", 'tx')
|
||||||
|
call assert_match('^"syn list @Aax', @:)
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_echohl_completion()
|
func Test_echohl_completion()
|
||||||
|
@@ -707,6 +707,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
283,
|
||||||
/**/
|
/**/
|
||||||
282,
|
282,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user