summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/autocmd.c8
-rw-r--r--src/testdir/test_autocmd.vim12
-rw-r--r--src/version.c2
3 files changed, 20 insertions, 2 deletions
diff --git a/src/autocmd.c b/src/autocmd.c
index 5bcf3ab56..c9733ba5d 100644
--- a/src/autocmd.c
+++ b/src/autocmd.c
@@ -2766,6 +2766,7 @@ autocmd_add_or_delete(typval_T *argvars, typval_T *rettv, int delete)
char_u *end;
int once;
int nested;
+ int replace; // replace the cmd for a group/event
int retval = VVAL_TRUE;
int save_augroup = current_augroup;
@@ -2877,6 +2878,9 @@ autocmd_add_or_delete(typval_T *argvars, typval_T *rettv, int delete)
once = dict_get_bool(event_dict, (char_u *)"once", FALSE);
nested = dict_get_bool(event_dict, (char_u *)"nested", FALSE);
+ // if 'replace' is true, then remove all the commands associated with
+ // this autocmd event/group and add the new command.
+ replace = dict_get_bool(event_dict, (char_u *)"replace", FALSE);
cmd = dict_get_string(event_dict, (char_u *)"cmd", TRUE);
if (cmd == NULL)
@@ -2903,8 +2907,8 @@ autocmd_add_or_delete(typval_T *argvars, typval_T *rettv, int delete)
}
else
{
- if (do_autocmd_event(event, pat, once, nested, cmd, delete, group,
- 0) == FAIL)
+ if (do_autocmd_event(event, pat, once, nested, cmd,
+ delete | replace, group, 0) == FAIL)
{
retval = VVAL_FALSE;
break;
diff --git a/src/testdir/test_autocmd.vim b/src/testdir/test_autocmd.vim
index c6c5f2172..e3df115a6 100644
--- a/src/testdir/test_autocmd.vim
+++ b/src/testdir/test_autocmd.vim
@@ -3413,6 +3413,18 @@ func Test_autocmd_add()
\ nested: v:false, once: v:false, event: 'BufHidden'}],
\ autocmd_get(#{group: 'TestAcSet'}))
+ " Test for replacing a cmd for an event in a group
+ call autocmd_delete([#{group: 'TestAcSet'}])
+ call autocmd_add([#{replace: v:true, group: 'TestAcSet', event: 'BufEnter',
+ \ pattern: '*.py', cmd: 'echo "bufenter"'}])
+ call autocmd_add([#{replace: v:true, group: 'TestAcSet', event: 'BufEnter',
+ \ pattern: '*.py', cmd: 'echo "bufenter"'}])
+ call assert_equal([
+ \ #{cmd: 'echo "bufenter"', group: 'TestAcSet', pattern: '*.py',
+ \ nested: v:false, once: v:false, event: 'BufEnter'}],
+ \ autocmd_get(#{group: 'TestAcSet'}))
+
+ " Test for adding a command for an unsupported autocmd event
let l = [#{group: 'TestAcSet', event: 'abc', pattern: '*.sh',
\ cmd: 'echo "bufadd"'}]
call assert_fails('call autocmd_add(l)', 'E216:')
diff --git a/src/version.c b/src/version.c
index 110535c9b..5ea047ac3 100644
--- a/src/version.c
+++ b/src/version.c
@@ -735,6 +735,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 5011,
+/**/
5010,
/**/
5009,