-- Insert-mode tests. local helpers = require('test.functional.helpers')(after_each) local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert local expect = helpers.expect local command = helpers.command local eq = helpers.eq local eval = helpers.eval local curbuf_contents = helpers.curbuf_contents describe('insert-mode', function() before_each(function() clear() end) it('indents only once after "!" keys #12894', function() command('let counter = []') command('set indentexpr=len(add(counter,0))') feed('ix') eq(' x', curbuf_contents()) end) it('CTRL-@', function() -- Inserts last-inserted text, leaves insert-mode. insert('hello') feed('ix') expect('hellhello') -- C-Space is the same as C-@. -- CTRL-SPC inserts last-inserted text, leaves insert-mode. feed('ix') expect('hellhellhello') -- CTRL-A inserts last inserted text feed('ix') expect('hellhellhellhelloxo') end) describe('Ctrl-R', function() it('works', function() command("let @@ = 'test'") feed('i"') expect('test') end) it('works with multi-byte text', function() command("let @@ = 'påskägg'") feed('i"') expect('påskägg') end) end) describe('Ctrl-O', function() it('enters command mode for one command', function() feed('ihello world') feed(':let ctrlo = "test"') feed('iii') expect('hello worldiii') eq(1, eval('ctrlo ==# "test"')) end) it('re-enters insert mode at the end of the line when running startinsert', function() -- #6962 feed('ihello world') feed(':startinsert') feed('iii') expect('hello worldiii') end) it('re-enters insert mode at the beginning of the line when running startinsert', function() insert('hello world') feed('0') feed(':startinsert') feed('aaa') expect('aaahello world') end) it('re-enters insert mode in the middle of the line when running startinsert', function() insert('hello world') feed('bi') feed(':startinsert') feed('ooo') expect('hello oooworld') end) end) describe('Ctrl-V', function() it('supports entering the decimal value of a character', function() feed('i076167') expect('L§') end) it('supports entering the octal value of a character with "o"', function() feed('io114o247') expect('L§') end) it('supports entering the octal value of a character with "O"', function() feed('iO114O247') expect('L§') end) it('supports entering the hexadecimal value of a character with "x"', function() feed('ix4cxA7') expect('L§') end) it('supports entering the hexadecimal value of a character with "X"', function() feed('iX4cXA7') expect('L§') end) it('supports entering the hexadecimal value of a character with "u"', function() feed('iu25bau25C7') expect('►◇') end) it('supports entering the hexadecimal value of a character with "U"', function() feed('iU0001f600U0001F601') expect('😀😁') end) it('entering character by value is interrupted by invalid character', function() feed('i76c76u3c0ju3c0U1f600jU1f600') expect('LcLπjπ😀j😀') end) it('shows o, O, u, U, x, X, and digits with modifiers', function() feed('i') expect('') feed('cc') expect('') feed('cc') expect('') feed('cc') expect('') end) end) it('Ctrl-Shift-V supports entering unsimplified key notations', function() feed('i') expect('') end) end)