mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06: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
|
auto-indent. Does the same as pasting with the mouse
|
||||||
|<MiddleMouse>|. When the register is linewise this will
|
|<MiddleMouse>|. When the register is linewise this will
|
||||||
insert the text above the current line, like with `P`.
|
insert the text above the current line, like with `P`.
|
||||||
Does not replace characters!
|
|
||||||
The '.' register (last inserted text) is still inserted as
|
The '.' register (last inserted text) is still inserted as
|
||||||
typed.
|
typed.
|
||||||
After this command, the '.' register contains the command
|
After this command, the '.' register contains the command
|
||||||
typed and not the text. I.e., the literals "^R^O" and not the
|
typed and not the text. I.e., the literals "^R^O" and not the
|
||||||
text from the register.
|
text from the register.
|
||||||
|
Does not replace characters in |Replace-mode|!
|
||||||
|
|
||||||
CTRL-R CTRL-P {register} *i_CTRL-R_CTRL-P*
|
CTRL-R CTRL-P {register} *i_CTRL-R_CTRL-P*
|
||||||
Insert the contents of a register literally and fix the
|
Insert the contents of a register literally and fix the
|
||||||
indent, like |[<MiddleMouse>|.
|
indent, like |[<MiddleMouse>|.
|
||||||
Does not replace characters!
|
|
||||||
The '.' register (last inserted text) is still inserted as
|
The '.' register (last inserted text) is still inserted as
|
||||||
typed.
|
typed.
|
||||||
After this command, the '.' register contains the command
|
After this command, the '.' register contains the command
|
||||||
typed and not the text. I.e., the literals "^R^P" and not the
|
typed and not the text. I.e., the literals "^R^P" and not the
|
||||||
text from the register.
|
text from the register.
|
||||||
|
Does not replace characters in |Replace-mode|!
|
||||||
|
|
||||||
*i_CTRL-T*
|
*i_CTRL-T*
|
||||||
CTRL-T Insert one shiftwidth of indent at the start of the current
|
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 {
|
} else {
|
||||||
for (size_t i = 0; i < reg->y_size; i++) {
|
for (size_t i = 0; i < reg->y_size; i++) {
|
||||||
if (regname == '-') {
|
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(Ctrl_R);
|
||||||
AppendCharToRedobuff(regname);
|
AppendCharToRedobuff(regname);
|
||||||
do_put(regname, NULL, BACKWARD, 1, PUT_CURSEND);
|
do_put(regname, NULL, dir, 1, PUT_CURSEND);
|
||||||
} else {
|
} else {
|
||||||
stuffescaped(reg->y_array[i], literally);
|
stuffescaped(reg->y_array[i], literally);
|
||||||
}
|
}
|
||||||
|
@ -4186,4 +4186,4 @@ func Test_brace_single_line()
|
|||||||
bw!
|
bw!
|
||||||
endfunc
|
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!
|
bwipe!
|
||||||
endfunc
|
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
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
Loading…
Reference in New Issue
Block a user