vim-patch:8.2.3888: the argument list may contain duplicates (#19795)

Problem:    The argument list may contain duplicates.
Solution:   Add the :argdedeupe command. (Nir Lichtman, closes vim/vim#6235)
73a024209c

Use latest index.txt :argdedupe doc from Vim.
This commit is contained in:
zeertzjq
2022-08-16 15:29:36 +08:00
committed by GitHub
parent cf3b871fa9
commit da13ed43cb
5 changed files with 68 additions and 2 deletions

View File

@@ -620,6 +620,29 @@ void ex_next(exarg_T *eap)
}
}
/// ":argdedupe"
void ex_argdedupe(exarg_T *eap FUNC_ATTR_UNUSED)
{
for (int i = 0; i < ARGCOUNT; i++) {
for (int j = i + 1; j < ARGCOUNT; j++) {
if (FNAMECMP(ARGLIST[i].ae_fname, ARGLIST[j].ae_fname) == 0) {
xfree(ARGLIST[j].ae_fname);
memmove(ARGLIST + j, ARGLIST + j + 1,
(size_t)(ARGCOUNT - j - 1) * sizeof(aentry_T));
ARGCOUNT--;
if (curwin->w_arg_idx == j) {
curwin->w_arg_idx = i;
} else if (curwin->w_arg_idx > j) {
curwin->w_arg_idx--;
}
j--;
}
}
}
}
/// ":argedit"
void ex_argedit(exarg_T *eap)
{

View File

@@ -106,6 +106,12 @@ module.cmds = {
addr_type='ADDR_ARGUMENTS',
func='ex_listdo',
},
{
command='argdedupe',
flags=TRLBAR,
addr_type='ADDR_NONE',
func='ex_argdedupe',
},
{
command='argedit',
flags=bit.bor(BANG, NEEDARG, RANGE, ZEROR, FILES, CMDARG, ARGOPT, TRLBAR),

View File

@@ -412,6 +412,35 @@ func Test_argedit()
bw! x
endfunc
" Test for the :argdedupe command
func Test_argdedupe()
call Reset_arglist()
argdedupe
call assert_equal([], argv())
args a a a aa b b a b aa
argdedupe
call assert_equal(['a', 'aa', 'b'], argv())
args a b c
argdedupe
call assert_equal(['a', 'b', 'c'], argv())
args a
argdedupe
call assert_equal(['a'], argv())
args a A b B
argdedupe
if has('fname_case')
call assert_equal(['a', 'A', 'b', 'B'], argv())
else
call assert_equal(['a', 'b'], argv())
endif
args a b a c a b
last
argdedupe
next
call assert_equal('c', expand('%:t'))
%argd
endfunc
" Test for the :argdelete command
func Test_argdelete()
call Reset_arglist()