diff options
author | Bram Moolenaar <Bram@vim.org> | 2015-06-19 15:17:55 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2015-06-19 15:17:55 +0200 |
commit | c004bc2726eafc7a56d1d9f8398a65a0a7dc8d6c (patch) | |
tree | 3a088bdfccf7659d244fc603677f831487c9dbfe /src/ops.c | |
parent | a594d77ffcccf2ac0e4079c41342ca55d4c9bb08 (diff) | |
download | vim-git-c004bc2726eafc7a56d1d9f8398a65a0a7dc8d6c.tar.gz |
patch 7.4.743v7.4.743
Problem: "p" in Visual mode causes an unexpected line split.
Solution: Advance the cursor first. (Yukihiro Nakadaira)
Diffstat (limited to 'src/ops.c')
-rw-r--r-- | src/ops.c | 13 |
1 files changed, 11 insertions, 2 deletions
@@ -3459,17 +3459,26 @@ do_put(regname, dir, count, flags) { if (flags & PUT_LINE_SPLIT) { + char_u *p; + /* "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(ml_get_cursor()); + p = ml_get_cursor(); + if (dir == FORWARD && *p != NUL) + mb_ptr_adv(p); + ptr = vim_strsave(p); if (ptr == NULL) goto end; ml_append(curwin->w_cursor.lnum, ptr, (colnr_T)0, FALSE); vim_free(ptr); - ptr = vim_strnsave(ml_get_curline(), curwin->w_cursor.col); + oldp = ml_get_curline(); + p = oldp + curwin->w_cursor.col; + if (dir == FORWARD && *p != NUL) + mb_ptr_adv(p); + ptr = vim_strnsave(oldp, p - oldp); if (ptr == NULL) goto end; ml_replace(curwin->w_cursor.lnum, ptr, FALSE); |