mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
fix(paste): deal with eol and eof in Visual mode
This commit is contained in:
parent
2601e0873f
commit
bfb7754442
@ -192,8 +192,19 @@ do
|
|||||||
if mode:find('^n') then -- Normal mode
|
if mode:find('^n') then -- Normal mode
|
||||||
vim.api.nvim_put(lines, 'c', true, false)
|
vim.api.nvim_put(lines, 'c', true, false)
|
||||||
else -- Visual or Select mode
|
else -- Visual or Select mode
|
||||||
vim.api.nvim_command([[exe "normal! \<Del>"]])
|
vim.api.nvim_command([[exe "silent normal! \<Del>"]])
|
||||||
vim.api.nvim_put(lines, 'c', false, false)
|
local del_start = vim.fn.getpos("'[")
|
||||||
|
local cursor_pos = vim.fn.getpos('.')
|
||||||
|
if mode:find('^[VS]') then -- linewise
|
||||||
|
if cursor_pos[2] < del_start[2] then -- replacing lines at eof
|
||||||
|
-- create a new line
|
||||||
|
vim.api.nvim_put({''}, 'l', true, true)
|
||||||
|
end
|
||||||
|
vim.api.nvim_put(lines, 'c', false, false)
|
||||||
|
else
|
||||||
|
-- paste after cursor when replacing text at eol, otherwise paste before cursor
|
||||||
|
vim.api.nvim_put(lines, 'c', cursor_pos[3] < del_start[3], false)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
-- put cursor at the end of the text instead of one character after it
|
-- put cursor at the end of the text instead of one character after it
|
||||||
vim.fn.setpos('.', vim.fn.getpos("']"))
|
vim.fn.setpos('.', vim.fn.getpos("']"))
|
||||||
|
@ -702,6 +702,42 @@ describe('API', function()
|
|||||||
feed('u')
|
feed('u')
|
||||||
expect('||')
|
expect('||')
|
||||||
end)
|
end)
|
||||||
|
it('stream: Visual mode either end not at the end of a line', function()
|
||||||
|
feed('i|xxx<CR>xxx|<Esc>hvhk')
|
||||||
|
nvim('paste', 'aaaaaa', false, 1)
|
||||||
|
nvim('paste', 'bbbbbb', false, 2)
|
||||||
|
nvim('paste', 'cccccc', false, 2)
|
||||||
|
nvim('paste', 'dddddd', false, 3)
|
||||||
|
expect('|aaaaaabbbbbbccccccdddddd|')
|
||||||
|
feed('u')
|
||||||
|
expect([[
|
||||||
|
|xxx
|
||||||
|
xxx|]])
|
||||||
|
end)
|
||||||
|
it('stream: Visual mode cursor at the end of a line', function()
|
||||||
|
feed('i||xxx<CR>xxx<Esc>vko')
|
||||||
|
nvim('paste', 'aaaaaa', false, 1)
|
||||||
|
nvim('paste', 'bbbbbb', false, 2)
|
||||||
|
nvim('paste', 'cccccc', false, 2)
|
||||||
|
nvim('paste', 'dddddd', false, 3)
|
||||||
|
expect('||aaaaaabbbbbbccccccdddddd')
|
||||||
|
feed('u')
|
||||||
|
expect([[
|
||||||
|
||xxx
|
||||||
|
xxx]])
|
||||||
|
end)
|
||||||
|
it('stream: Visual mode other end at the end of a line', function()
|
||||||
|
feed('i||xxx<CR>xxx<Esc>vk')
|
||||||
|
nvim('paste', 'aaaaaa', false, 1)
|
||||||
|
nvim('paste', 'bbbbbb', false, 2)
|
||||||
|
nvim('paste', 'cccccc', false, 2)
|
||||||
|
nvim('paste', 'dddddd', false, 3)
|
||||||
|
expect('||aaaaaabbbbbbccccccdddddd')
|
||||||
|
feed('u')
|
||||||
|
expect([[
|
||||||
|
||xxx
|
||||||
|
xxx]])
|
||||||
|
end)
|
||||||
it('non-streaming', function()
|
it('non-streaming', function()
|
||||||
-- With final "\n".
|
-- With final "\n".
|
||||||
nvim('paste', 'line 1\nline 2\nline 3\n', true, -1)
|
nvim('paste', 'line 1\nline 2\nline 3\n', true, -1)
|
||||||
|
Loading…
Reference in New Issue
Block a user