-- Test for mappings and abbreviations local helpers = require('test.functional.helpers')(after_each) local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert local feed_command, expect, poke_eventloop = helpers.feed_command, helpers.expect, helpers.poke_eventloop local command, eq, eval, meths = helpers.command, helpers.eq, helpers.eval, helpers.meths local sleep = helpers.sleep describe('mapping', function() before_each(clear) it('abbreviations with р (0x80)', function() insert([[ test starts here: ]]) -- Abbreviations with р (0x80) should work. feed_command('inoreab чкпр vim') feed('GAчкпр ') expect([[ test starts here: vim ]]) end) it('Ctrl-c works in Insert mode', function() -- Mapping of ctrl-c in insert mode feed_command('set cpo-=< cpo-=k') feed_command('inoremap ') feed_command('cnoremap dummy') feed_command('cunmap ') feed('GA') feed('TEST2: CTRL-C |') poke_eventloop() feed('A|') poke_eventloop() feed_command('unmap ') feed_command('unmap! ') expect([[ TEST2: CTRL-C |A| ]]) end) it('Ctrl-c works in Visual mode', function() feed_command([[vnoremap :$put ='vmap works']]) feed('GV') -- XXX: For some reason the mapping is only triggered -- when is in a separate feed command. poke_eventloop() feed('') feed_command('vunmap ') expect([[ vmap works]]) end) it('langmap', function() -- langmap should not get remapped in insert mode. feed_command('inoremap { FAIL_ilangmap') feed_command('set langmap=+{ langnoremap') feed('o+') -- Insert mode expr mapping with langmap. feed_command('inoremap { "FAIL_iexplangmap"') feed('o+') -- langmap should not get remapped in cmdline mode. feed_command('cnoremap { FAIL_clangmap') feed('o+') feed_command('cunmap {') -- cmdline mode expr mapping with langmap. feed_command('cnoremap { "FAIL_cexplangmap"') feed('o+') feed_command('cunmap {') -- Assert buffer contents. expect([[ + + + +]]) end) it('feedkeys', function() insert([[ a b c d a b c d ]]) -- Vim's issue #212 (feedkeys insert mapping at current position) feed_command('nnoremap . :call feedkeys(".", "in")') feed('/^a b') feed('0qqdw.ifooqj0@q') feed_command('unmap .') expect([[ fooc d fooc d ]]) end) it('i_CTRL-G_U', function() -- U works only within a single line feed_command('imapclear') feed_command('imap ( ()U') feed('G2okiTest1: text with a (here some more textk.') -- test undo feed('G2okiTest2: text wit a (here some more text [und undo]uk.u') feed_command('imapclear') feed_command('set whichwrap=<,>,[,]') feed('G3o2k') feed_command([[:exe ":norm! iTest3: text with a (parenthesis here\U\new line here\\\."]]) expect([[ Test1: text with a (here some more text) Test1: text with a (here some more text) Test2: text wit a (here some more text [und undo]) new line here Test3: text with a (parenthesis here new line here ]]) end) it(' mapping in Insert mode works correctly vim-patch:8.2.4692', function() command('set mouse=a') command([[inoremap let g:dragged = 1]]) feed('i') sleep(10) meths.input_mouse('left', 'press', '', 0, 0, 0) sleep(10) meths.input_mouse('left', 'drag', '', 0, 0, 1) sleep(10) eq(1, eval('g:dragged')) eq('v', eval('mode()')) feed([[]]) command([[inoremap ]]) feed('i') sleep(10) meths.input_mouse('left', 'press', '', 0, 0, 0) sleep(10) meths.input_mouse('left', 'drag', '', 0, 0, 1) sleep(10) eq('n', eval('mode()')) end) end)