edit.c: CTRL-SPC: Insert previously-inserted text. #6090

Default Vim behavior of i_CTRL-<Space> is to insert the last-inserted
text and exit insert mode. :help i_CTRL-@

Before this commit that did not happen because insert_handle_key()
checks for NUL instead of checking for ' ' with a CTRL `mod_mask`.

I'm leaving the check for NUL despite the fact that at the moment that
key is never seen when using the terminal UI (not for C-Space, nor C-@).
This is because I assume it's still allowed for other front-ends to pass
NUL, but at the moment the terminal UI isn't.
This commit is contained in:
Matthew Malcomson 2017-02-10 15:58:45 +00:00 committed by Justin M. Keyes
parent 28a6d4393d
commit 86c2adc074
2 changed files with 27 additions and 0 deletions

View File

@ -844,6 +844,11 @@ static int insert_handle_key(InsertState *s)
return 0; // exit insert mode
case ' ':
if (mod_mask != 4) {
goto normalchar;
}
// FALLTHROUGH
case K_ZERO: // Insert the previously inserted text.
case NUL:
case Ctrl_A:

View File

@ -0,0 +1,22 @@
local helpers = require('test.functional.helpers')(after_each)
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local expect = helpers.expect
clear()
describe('insert-mode', function()
it('CTRL-@ inserts last-inserted text, leaves insert-mode', function()
insert('hello')
feed('i<C-@>x')
expect('hellhello')
end)
-- C-Space is the same as C-@
it('CTRL-SPC inserts last-inserted text, leaves insert-mode', function()
feed('i<C-Space>x')
expect('hellhellhello')
end)
it('CTRL-A inserts last inserted text', function()
feed('i<C-A>x')
expect('hellhellhellhelloxo')
end)
end)