mirror of
https://github.com/neovim/neovim.git
synced 2025-10-02 07:58:35 +00:00
vim-patch:7.4.743
Problem: "p" in Visual mode causes an unexpected line split.
Solution: Advance the cursor first. (Yukihiro Nakadaira)
c004bc2726
This commit is contained in:
@@ -2664,17 +2664,27 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
|
||||
|
||||
if (y_type == MLINE) {
|
||||
if (flags & PUT_LINE_SPLIT) {
|
||||
/* "p" or "P" in Visual mode: split the lines to put the text in
|
||||
* between. */
|
||||
if (u_save_cursor() == FAIL)
|
||||
// "p" or "P" in Visual mode: split the lines to put the text in
|
||||
// between.
|
||||
if (u_save_cursor() == FAIL) {
|
||||
goto end;
|
||||
ptr = vim_strsave(get_cursor_pos_ptr());
|
||||
ml_append(curwin->w_cursor.lnum, ptr, (colnr_T)0, FALSE);
|
||||
}
|
||||
char_u *p = get_cursor_pos_ptr();
|
||||
if (dir == FORWARD && *p != NUL) {
|
||||
mb_ptr_adv(p);
|
||||
}
|
||||
ptr = vim_strsave(p);
|
||||
ml_append(curwin->w_cursor.lnum, ptr, (colnr_T)0, false);
|
||||
xfree(ptr);
|
||||
|
||||
ptr = vim_strnsave(get_cursor_line_ptr(), curwin->w_cursor.col);
|
||||
ml_replace(curwin->w_cursor.lnum, ptr, FALSE);
|
||||
++nr_lines;
|
||||
oldp = get_cursor_line_ptr();
|
||||
p = oldp + curwin->w_cursor.col;
|
||||
if (dir == FORWARD && *p != NUL) {
|
||||
mb_ptr_adv(p);
|
||||
}
|
||||
ptr = vim_strnsave(oldp, p - oldp);
|
||||
ml_replace(curwin->w_cursor.lnum, ptr, false);
|
||||
nr_lines++;
|
||||
dir = FORWARD;
|
||||
}
|
||||
if (flags & PUT_LINE_FORWARD) {
|
||||
|
@@ -545,7 +545,7 @@ static int included_patches[] = {
|
||||
746,
|
||||
745,
|
||||
// 744 NA
|
||||
// 743,
|
||||
743,
|
||||
742,
|
||||
741,
|
||||
740,
|
||||
|
@@ -31,6 +31,13 @@ local function put_abc()
|
||||
$put ='c']])
|
||||
end
|
||||
|
||||
local function put_aaabbbccc()
|
||||
source([[
|
||||
$put ='aaa'
|
||||
$put ='bbb'
|
||||
$put ='ccc']])
|
||||
end
|
||||
|
||||
local function define_select_mode_maps()
|
||||
source([[
|
||||
snoremap <lt>End> <End>
|
||||
@@ -307,4 +314,61 @@ describe('Visual mode and operator', function()
|
||||
a]])
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('v_p:', function()
|
||||
it('replace last character with line register at middle line', function()
|
||||
put_aaabbbccc()
|
||||
execute('-2yank')
|
||||
feed('k$vp')
|
||||
|
||||
expect([[
|
||||
|
||||
aaa
|
||||
bb
|
||||
aaa
|
||||
|
||||
ccc]])
|
||||
end)
|
||||
|
||||
it('replace last character with line register at middle line selecting newline', function()
|
||||
put_aaabbbccc()
|
||||
execute('-2yank')
|
||||
feed('k$v$p')
|
||||
|
||||
expect([[
|
||||
|
||||
aaa
|
||||
bb
|
||||
aaa
|
||||
ccc]])
|
||||
end)
|
||||
|
||||
it('replace last character with line register at last line', function()
|
||||
put_aaabbbccc()
|
||||
execute('-2yank')
|
||||
feed('$vp')
|
||||
|
||||
expect([[
|
||||
|
||||
aaa
|
||||
bbb
|
||||
cc
|
||||
aaa
|
||||
]])
|
||||
end)
|
||||
|
||||
it('replace last character with line register at last line selecting newline', function()
|
||||
put_aaabbbccc()
|
||||
execute('-2yank')
|
||||
feed('$v$p')
|
||||
|
||||
expect([[
|
||||
|
||||
aaa
|
||||
bbb
|
||||
cc
|
||||
aaa
|
||||
]])
|
||||
end)
|
||||
end)
|
||||
end)
|
||||
|
Reference in New Issue
Block a user