diff options
author | watiko <service@mail.watiko.net> | 2016-01-14 13:56:41 +0900 |
---|---|---|
committer | watiko <service@mail.watiko.net> | 2016-02-01 03:47:09 +0900 |
commit | 3a94e06abbcc0dfff658b626891ec308f7582180 (patch) | |
tree | 44f0097b4b22535a240e9299935025ff2b0c3180 | |
parent | 40149a9dbf475ad1d0dec9a9494a32c26a6536ce (diff) | |
download | rneovim-3a94e06abbcc0dfff658b626891ec308f7582180.tar.gz rneovim-3a94e06abbcc0dfff658b626891ec308f7582180.tar.bz2 rneovim-3a94e06abbcc0dfff658b626891ec308f7582180.zip |
vim-patch:7.4.1085
Problem: The CTRL-A and CTRL-X commands do not update the '[ and '] marks.
Solution: (Yukihiro Nakadaira)
https://github.com/vim/vim/commit/a52dfaed104183c1fa2a3b6e4430b23d86bcbece
-rw-r--r-- | src/nvim/ops.c | 18 | ||||
-rw-r--r-- | src/nvim/testdir/test_marks.in | 18 | ||||
-rw-r--r-- | src/nvim/testdir/test_marks.ok | 10 | ||||
-rw-r--r-- | src/nvim/version.c | 1 |
4 files changed, 46 insertions, 1 deletions
diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 71c4fa629e..8887b3ae91 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -4217,6 +4217,8 @@ int do_addsub(int command, linenr_T Prenum1, bool g_cmd) bool did_change = false; pos_T t = curwin->w_cursor; int maxlen = 0; + pos_T startpos; + pos_T endpos; dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); // "heX" dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); // "Octal" @@ -4393,9 +4395,13 @@ int do_addsub(int command, linenr_T Prenum1, bool g_cmd) } } curwin->w_cursor.col = col; + if (!did_change) { + startpos = curwin->w_cursor; + } did_change = true; (void)del_char(false); ins_char(firstdigit); + endpos = curwin->w_cursor; curwin->w_cursor.col = col; } else { if (col > 0 && ptr[col - 1] == '-' && !visual) { @@ -4477,6 +4483,9 @@ int do_addsub(int command, linenr_T Prenum1, bool g_cmd) // Delete the old number. curwin->w_cursor.col = col; + if (!did_change) { + startpos = curwin->w_cursor; + } did_change = true; todel = length; c = gchar_cursor(); @@ -4559,6 +4568,7 @@ int do_addsub(int command, linenr_T Prenum1, bool g_cmd) STRCAT(buf1, buf2); ins_str(buf1); // insert the new number xfree(buf1); + endpos = curwin->w_cursor; if (lnum < lnume) { curwin->w_cursor.col = t.col; } else if (did_change && curwin->w_cursor.col) { @@ -4586,6 +4596,14 @@ int do_addsub(int command, linenr_T Prenum1, bool g_cmd) // cursor at the top of the selection curwin->w_cursor = VIsual; } + if (did_change) { + // set the '[ and '] marks + curbuf->b_op_start = startpos; + curbuf->b_op_end = endpos; + if (curbuf->b_op_end.col > 0) { + curbuf->b_op_end.col--; + } + } return OK; } diff --git a/src/nvim/testdir/test_marks.in b/src/nvim/testdir/test_marks.in index 341f3ac30f..23c2fb65fe 100644 --- a/src/nvim/testdir/test_marks.in +++ b/src/nvim/testdir/test_marks.in @@ -8,11 +8,27 @@ STARTTEST madduu :let a = string(getpos("'a")) :$put ='Mark after delete-undo-redo-undo: '.a -:/^\t/,$wq! test.out +:'' ENDTEST textline A textline B textline C +STARTTEST +:" test that CTRL-A and CTRL-X updates last changed mark '[, ']. +:/^123/ +:execute "normal! \<C-A>`[v`]rAjwvjw\<C-X>`[v`]rX" +ENDTEST + +CTRL-A CTRL-X: +123 123 123 +123 123 123 +123 123 123 + +STARTTEST +:g/^STARTTEST/.,/^ENDTEST/d +:wq! test.out +ENDTEST + Results: diff --git a/src/nvim/testdir/test_marks.ok b/src/nvim/testdir/test_marks.ok index dd1a3e43b5..e6c02ee7b0 100644 --- a/src/nvim/testdir/test_marks.ok +++ b/src/nvim/testdir/test_marks.ok @@ -1,6 +1,16 @@ +Tests for marks. + + textline A textline B textline C + +CTRL-A CTRL-X: +AAA 123 123 +123 XXXXXXX +XXX 123 123 + + Results: Mark after delete-undo-redo-undo: [0, 15, 2, 0] diff --git a/src/nvim/version.c b/src/nvim/version.c index 95400e66e9..516253cc08 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -73,6 +73,7 @@ static int included_patches[] = { + 1085, 1084, // 1083, // 1082, |