vim-patch:8.0.0402: :map completion does not have <special>

Problem:    :map completion does not have <special>. (Dominique Pelle)
Solution:   Recognize <special> in completion.  Add a test.

cf5fdf7d16
This commit is contained in:
ckelsel
2018-01-15 19:41:29 +08:00
parent 63bb7198df
commit 28998cfd81
2 changed files with 35 additions and 8 deletions

View File

@@ -3366,6 +3366,10 @@ set_context_in_map_cmd (
arg = skipwhite(arg + 8); arg = skipwhite(arg + 8);
continue; continue;
} }
if (STRNCMP(arg, "<special>", 9) == 0) {
arg = skipwhite(arg + 9);
continue;
}
if (STRNCMP(arg, "<script>", 8) == 0) { if (STRNCMP(arg, "<script>", 8) == 0) {
arg = skipwhite(arg + 8); arg = skipwhite(arg + 8);
continue; continue;
@@ -3408,21 +3412,24 @@ int ExpandMappings(regmatch_T *regmatch, int *num_file, char_u ***file)
for (round = 1; round <= 2; ++round) { for (round = 1; round <= 2; ++round) {
count = 0; count = 0;
for (i = 0; i < 6; ++i) { for (i = 0; i < 7; i++) {
if (i == 0) if (i == 0) {
p = (char_u *)"<silent>"; p = (char_u *)"<silent>";
else if (i == 1) } else if (i == 1) {
p = (char_u *)"<unique>"; p = (char_u *)"<unique>";
else if (i == 2) } else if (i == 2) {
p = (char_u *)"<script>"; p = (char_u *)"<script>";
else if (i == 3) } else if (i == 3) {
p = (char_u *)"<expr>"; p = (char_u *)"<expr>";
else if (i == 4 && !expand_buffer) } else if (i == 4 && !expand_buffer) {
p = (char_u *)"<buffer>"; p = (char_u *)"<buffer>";
else if (i == 5) } else if (i == 5) {
p = (char_u *)"<nowait>"; p = (char_u *)"<nowait>";
else } else if (i == 6) {
p = (char_u *)"<special>";
} else {
continue; continue;
}
if (vim_regexec(regmatch, p, (colnr_T)0)) { if (vim_regexec(regmatch, p, (colnr_T)0)) {
if (round == 1) if (round == 1)

View File

@@ -25,6 +25,26 @@ func Test_complete_wildmenu()
set nowildmenu set nowildmenu
endfunc endfunc
func Test_map_completion()
if !has('cmdline_compl')
return
endif
call feedkeys(":map <unique> <si\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <unique> <silent>', getreg(':'))
call feedkeys(":map <script> <un\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <script> <unique>', getreg(':'))
call feedkeys(":map <expr> <sc\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <expr> <script>', getreg(':'))
call feedkeys(":map <buffer> <e\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <buffer> <expr>', getreg(':'))
call feedkeys(":map <nowait> <b\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <nowait> <buffer>', getreg(':'))
call feedkeys(":map <special> <no\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <special> <nowait>', getreg(':'))
call feedkeys(":map <silent> <sp\<Tab>\<Home>\"\<CR>", 'xt')
call assert_equal('"map <silent> <special>', getreg(':'))
endfunc
func Test_expr_completion() func Test_expr_completion()
if !(has('cmdline_compl') && has('eval')) if !(has('cmdline_compl') && has('eval'))
return return