diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/ex_docmd.c | 15 | ||||
-rw-r--r-- | src/nvim/testdir/test_usercommands.vim | 29 |
2 files changed, 34 insertions, 10 deletions
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index f992badc5e..43d57cb278 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -6567,20 +6567,27 @@ size_t uc_mods(char *buf, const cmdmod_T *cmod, bool quote) // the modifiers that are simple flags for (size_t i = 0; i < ARRAY_SIZE(mod_entries); i++) { - if (cmdmod.cmod_flags & mod_entries[i].flag) { + if (cmod->cmod_flags & mod_entries[i].flag) { result += add_cmd_modifier(buf, mod_entries[i].name, &multi_mods); } } // :silent - if (msg_silent > 0) { + if (cmod->cmod_flags & CMOD_SILENT) { result += add_cmd_modifier(buf, (cmod->cmod_flags & CMOD_ERRSILENT) ? "silent!" : "silent", &multi_mods); } // :verbose - if (p_verbose > 0) { - result += add_cmd_modifier(buf, "verbose", &multi_mods); + if (cmod->cmod_verbose > 0) { + int verbose_value = cmod->cmod_verbose - 1; + if (verbose_value == 1) { + result += add_cmd_modifier(buf, "verbose", &multi_mods); + } else { + char verbose_buf[NUMBUFLEN]; + snprintf(verbose_buf, NUMBUFLEN, "%dverbose", verbose_value); + result += add_cmd_modifier(buf, verbose_buf, &multi_mods); + } } // flags from cmod->cmod_split result += add_win_cmd_modifers(buf, cmod, &multi_mods); diff --git a/src/nvim/testdir/test_usercommands.vim b/src/nvim/testdir/test_usercommands.vim index 596b8b53aa..015a16705e 100644 --- a/src/nvim/testdir/test_usercommands.vim +++ b/src/nvim/testdir/test_usercommands.vim @@ -56,7 +56,10 @@ function Test_cmdmods() call assert_equal('lockmarks', g:mods) loc MyCmd call assert_equal('lockmarks', g:mods) - " noautocmd MyCmd + noautocmd MyCmd + call assert_equal('noautocmd', g:mods) + noa MyCmd + call assert_equal('noautocmd', g:mods) noswapfile MyCmd call assert_equal('noswapfile', g:mods) nos MyCmd @@ -70,29 +73,43 @@ function Test_cmdmods() call assert_equal('silent', g:mods) sil MyCmd call assert_equal('silent', g:mods) + silent! MyCmd + call assert_equal('silent!', g:mods) + sil! MyCmd + call assert_equal('silent!', g:mods) tab MyCmd call assert_equal('tab', g:mods) topleft MyCmd call assert_equal('topleft', g:mods) to MyCmd call assert_equal('topleft', g:mods) - " unsilent MyCmd + unsilent MyCmd + call assert_equal('unsilent', g:mods) + uns MyCmd + call assert_equal('unsilent', g:mods) verbose MyCmd call assert_equal('verbose', g:mods) verb MyCmd call assert_equal('verbose', g:mods) + 0verbose MyCmd + call assert_equal('0verbose', g:mods) + 3verbose MyCmd + call assert_equal('3verbose', g:mods) + 999verbose MyCmd + call assert_equal('999verbose', g:mods) vertical MyCmd call assert_equal('vertical', g:mods) vert MyCmd call assert_equal('vertical', g:mods) aboveleft belowright botright browse confirm hide keepalt keepjumps - \ keepmarks keeppatterns lockmarks noswapfile silent tab - \ topleft verbose vertical MyCmd + \ keepmarks keeppatterns lockmarks noautocmd noswapfile silent + \ tab topleft unsilent verbose vertical MyCmd call assert_equal('browse confirm hide keepalt keepjumps ' . - \ 'keepmarks keeppatterns lockmarks noswapfile silent ' . - \ 'verbose aboveleft belowright botright tab topleft vertical', g:mods) + \ 'keepmarks keeppatterns lockmarks noswapfile unsilent noautocmd ' . + \ 'silent verbose aboveleft belowright botright tab topleft vertical', + \ g:mods) let g:mods = '' command! -nargs=* MyQCmd let g:mods .= '<q-mods> ' |