fix(paste): ignore mappings in Cmdline mode (#18114)

This commit is contained in:
Eden Zhang 2022-04-17 12:11:53 +12:00 committed by GitHub
parent dcf7bc4140
commit 813ecdac79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 5 deletions

View File

@ -174,11 +174,11 @@ do
if vim.fn.getcmdtype() ~= '' then -- cmdline-mode: paste only 1 line.
if not got_line1 then
got_line1 = (#lines > 1)
vim.api.nvim_set_option('paste', true) -- For nvim_input().
-- Escape "<" and control characters
local line1 = lines[1]:gsub('<', '<lt>'):gsub('(%c)', '\022%1')
vim.api.nvim_input(line1)
vim.api.nvim_set_option('paste', false)
-- Escape control characters
local line1 = lines[1]:gsub('(%c)', '\022%1')
-- nvim_input() is affected by mappings,
-- so use nvim_feedkeys() with "n" flag to ignore mappings.
vim.api.nvim_feedkeys(line1, 'n', true)
end
return true
end

View File

@ -1085,6 +1085,12 @@ describe('API', function()
eq('aabbccdd', funcs.getcmdline())
expect('')
end)
it('mappings are disabled in Cmdline mode', function()
command('cnoremap a b')
feed(':')
nvim('paste', 'a', true, -1)
eq('a', funcs.getcmdline())
end)
it('pasting with empty last chunk in Cmdline mode', function()
local screen = Screen.new(20, 4)
screen:attach()