mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 7.4.1085
Problem: The CTRL-A and CTRL-X commands do not update the '[ and '] marks. Solution: (Yukihiro Nakadaira)
This commit is contained in:
parent
e1edc1caba
commit
a52dfaed10
16
src/ops.c
16
src/ops.c
@ -5382,6 +5382,8 @@ do_addsub(command, Prenum1, g_cmd)
|
|||||||
int pos = 0;
|
int pos = 0;
|
||||||
int bit = 0;
|
int bit = 0;
|
||||||
int bits = sizeof(unsigned long) * 8;
|
int bits = sizeof(unsigned long) * 8;
|
||||||
|
pos_T startpos;
|
||||||
|
pos_T endpos;
|
||||||
|
|
||||||
dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); /* "heX" */
|
dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); /* "heX" */
|
||||||
dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); /* "Octal" */
|
dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); /* "Octal" */
|
||||||
@ -5582,9 +5584,12 @@ do_addsub(command, Prenum1, g_cmd)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
curwin->w_cursor.col = col;
|
curwin->w_cursor.col = col;
|
||||||
|
if (!did_change)
|
||||||
|
startpos = curwin->w_cursor;
|
||||||
did_change = TRUE;
|
did_change = TRUE;
|
||||||
(void)del_char(FALSE);
|
(void)del_char(FALSE);
|
||||||
ins_char(firstdigit);
|
ins_char(firstdigit);
|
||||||
|
endpos = curwin->w_cursor;
|
||||||
curwin->w_cursor.col = col;
|
curwin->w_cursor.col = col;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -5677,6 +5682,8 @@ do_addsub(command, Prenum1, g_cmd)
|
|||||||
* Delete the old number.
|
* Delete the old number.
|
||||||
*/
|
*/
|
||||||
curwin->w_cursor.col = col;
|
curwin->w_cursor.col = col;
|
||||||
|
if (!did_change)
|
||||||
|
startpos = curwin->w_cursor;
|
||||||
did_change = TRUE;
|
did_change = TRUE;
|
||||||
todel = length;
|
todel = length;
|
||||||
c = gchar_cursor();
|
c = gchar_cursor();
|
||||||
@ -5763,6 +5770,7 @@ do_addsub(command, Prenum1, g_cmd)
|
|||||||
STRCAT(buf1, buf2);
|
STRCAT(buf1, buf2);
|
||||||
ins_str(buf1); /* insert the new number */
|
ins_str(buf1); /* insert the new number */
|
||||||
vim_free(buf1);
|
vim_free(buf1);
|
||||||
|
endpos = curwin->w_cursor;
|
||||||
if (lnum < lnume)
|
if (lnum < lnume)
|
||||||
curwin->w_cursor.col = t.col;
|
curwin->w_cursor.col = t.col;
|
||||||
else if (did_change && curwin->w_cursor.col)
|
else if (did_change && curwin->w_cursor.col)
|
||||||
@ -5788,6 +5796,14 @@ do_addsub(command, Prenum1, g_cmd)
|
|||||||
if (visual)
|
if (visual)
|
||||||
/* cursor at the top of the selection */
|
/* cursor at the top of the selection */
|
||||||
curwin->w_cursor = VIsual;
|
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;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,11 +8,27 @@ STARTTEST
|
|||||||
madduu
|
madduu
|
||||||
:let a = string(getpos("'a"))
|
:let a = string(getpos("'a"))
|
||||||
:$put ='Mark after delete-undo-redo-undo: '.a
|
:$put ='Mark after delete-undo-redo-undo: '.a
|
||||||
:/^\t/,$wq! test.out
|
:''
|
||||||
ENDTEST
|
ENDTEST
|
||||||
|
|
||||||
textline A
|
textline A
|
||||||
textline B
|
textline B
|
||||||
textline C
|
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:
|
Results:
|
||||||
|
@ -1,6 +1,16 @@
|
|||||||
|
Tests for marks.
|
||||||
|
|
||||||
|
|
||||||
textline A
|
textline A
|
||||||
textline B
|
textline B
|
||||||
textline C
|
textline C
|
||||||
|
|
||||||
|
|
||||||
|
CTRL-A CTRL-X:
|
||||||
|
AAA 123 123
|
||||||
|
123 XXXXXXX
|
||||||
|
XXX 123 123
|
||||||
|
|
||||||
|
|
||||||
Results:
|
Results:
|
||||||
Mark after delete-undo-redo-undo: [0, 15, 2, 0]
|
Mark after delete-undo-redo-undo: [0, 15, 2, 0]
|
||||||
|
@ -741,6 +741,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1085,
|
||||||
/**/
|
/**/
|
||||||
1084,
|
1084,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user