diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-03-15 06:04:50 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-03-15 18:15:18 +0800 |
commit | e263afc0e972d11d3b9b663c3ac0b5575c4deb88 (patch) | |
tree | c3ed700a411bba1c69bfbd624bd68871b02c4e80 | |
parent | 3470a9c3de076ec3170525c3de66544f9836c775 (diff) | |
download | rneovim-e263afc0e972d11d3b9b663c3ac0b5575c4deb88.tar.gz rneovim-e263afc0e972d11d3b9b663c3ac0b5575c4deb88.tar.bz2 rneovim-e263afc0e972d11d3b9b663c3ac0b5575c4deb88.zip |
fix(paste): escape control characters in Cmdline mode
-rw-r--r-- | runtime/lua/vim/_editor.lua | 3 | ||||
-rw-r--r-- | test/functional/api/vim_spec.lua | 12 |
2 files changed, 14 insertions, 1 deletions
diff --git a/runtime/lua/vim/_editor.lua b/runtime/lua/vim/_editor.lua index 26b9693189..d4db4850bd 100644 --- a/runtime/lua/vim/_editor.lua +++ b/runtime/lua/vim/_editor.lua @@ -175,7 +175,8 @@ do if not got_line1 then got_line1 = (#lines > 1) vim.api.nvim_set_option('paste', true) -- For nvim_input(). - local line1 = lines[1]:gsub('<', '<lt>'):gsub('[\r\n\012\027]', ' ') -- Scrub. + -- 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) end diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index f4a7d38d31..af6872760a 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -1097,6 +1097,18 @@ describe('API', function() :Foo^ | ]]) end) + it('pasting text with control characters in Cmdline mode', function() + local screen = Screen.new(20, 4) + screen:attach() + feed(':') + nvim('paste', 'normal! \023\022\006\027', true, -1) + screen:expect([[ + | + ~ | + ~ | + :normal! ^W^V^F^[^ | + ]]) + end) it('crlf=false does not break lines at CR, CRLF', function() nvim('paste', 'line 1\r\n\r\rline 2\nline 3\rline 4\r', false, -1) expect('line 1\r\n\r\rline 2\nline 3\rline 4\r') |