mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 03:05:11 -07:00
vim-patch:9.1.0015: i_CTRL-R- no longer works in replace mode
Problem: i_CTRL-R- no longer works in replace mode
Solution: delete characters in replace mode before putting, add a test,
add a bit warning into the documentation, that i_CTRL-R-P/O
is not supported in Replace mode for now
fixes: vim/vim#13792
closes: vim/vim#13816
5d5cbb2b9a
Co-authored-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
parent
4142b8cd2c
commit
2783b6b0a4
@ -160,22 +160,22 @@ CTRL-R CTRL-O {register} *i_CTRL-R_CTRL-O*
|
||||
auto-indent. Does the same as pasting with the mouse
|
||||
|<MiddleMouse>|. When the register is linewise this will
|
||||
insert the text above the current line, like with `P`.
|
||||
Does not replace characters!
|
||||
The '.' register (last inserted text) is still inserted as
|
||||
typed.
|
||||
After this command, the '.' register contains the command
|
||||
typed and not the text. I.e., the literals "^R^O" and not the
|
||||
text from the register.
|
||||
Does not replace characters in |Replace-mode|!
|
||||
|
||||
CTRL-R CTRL-P {register} *i_CTRL-R_CTRL-P*
|
||||
Insert the contents of a register literally and fix the
|
||||
indent, like |[<MiddleMouse>|.
|
||||
Does not replace characters!
|
||||
The '.' register (last inserted text) is still inserted as
|
||||
typed.
|
||||
After this command, the '.' register contains the command
|
||||
typed and not the text. I.e., the literals "^R^P" and not the
|
||||
text from the register.
|
||||
Does not replace characters in |Replace-mode|!
|
||||
|
||||
*i_CTRL-T*
|
||||
CTRL-T Insert one shiftwidth of indent at the start of the current
|
||||
|
@ -1282,9 +1282,22 @@ int insert_reg(int regname, bool literally_arg)
|
||||
} else {
|
||||
for (size_t i = 0; i < reg->y_size; i++) {
|
||||
if (regname == '-') {
|
||||
Direction dir = BACKWARD;
|
||||
if ((State & REPLACE_FLAG) != 0) {
|
||||
pos_T curpos;
|
||||
u_save_cursor();
|
||||
del_bytes((colnr_T)strlen(reg->y_array[0]), true, false);
|
||||
curpos = curwin->w_cursor;
|
||||
if (oneright() == FAIL) {
|
||||
// hit end of line, need to put forward (after the current position)
|
||||
dir = FORWARD;
|
||||
}
|
||||
curwin->w_cursor = curpos;
|
||||
}
|
||||
|
||||
AppendCharToRedobuff(Ctrl_R);
|
||||
AppendCharToRedobuff(regname);
|
||||
do_put(regname, NULL, BACKWARD, 1, PUT_CURSEND);
|
||||
do_put(regname, NULL, dir, 1, PUT_CURSEND);
|
||||
} else {
|
||||
stuffescaped(reg->y_array[i], literally);
|
||||
}
|
||||
|
@ -4186,4 +4186,4 @@ func Test_brace_single_line()
|
||||
bw!
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
" vim: shiftwidth=2 sts=2 expandtab nofoldenable
|
||||
|
@ -890,4 +890,24 @@ func Test_register_y_append_reset()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_insert_small_delete_replace_mode()
|
||||
new
|
||||
call setline(1, ['foo', 'bar', 'foobar', 'bar'])
|
||||
let @-='foo'
|
||||
call cursor(2, 1)
|
||||
exe ":norm! R\<C-R>-\<C-R>-"
|
||||
call assert_equal('foofoo', getline(2))
|
||||
call cursor(3, 1)
|
||||
norm! D
|
||||
call assert_equal(['foo', 'foofoo', '', 'bar'], getline(1, 4))
|
||||
call cursor(4, 2)
|
||||
exe ":norm! R\<C-R>-ZZZZ"
|
||||
call assert_equal(['foo', 'foofoo', '', 'bfoobarZZZZ'], getline(1, 4))
|
||||
call cursor(1, 1)
|
||||
let @-=''
|
||||
exe ":norm! R\<C-R>-ZZZ"
|
||||
call assert_equal(['ZZZ', 'foofoo', '', 'bfoobarZZZZ'], getline(1, 4))
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
Loading…
Reference in New Issue
Block a user