| " Tests for mappings and abbreviations |
| |
| if !has('multi_byte') |
| finish |
| endif |
| |
| func Test_abbreviation() |
| " abbreviation with 0x80 should work |
| inoreab чкпр vim |
| call feedkeys("Goчкпр \<Esc>", "xt") |
| call assert_equal('vim ', getline('$')) |
| iunab чкпр |
| set nomodified |
| endfunc |
| |
| func Test_map_ctrl_c_insert() |
| " mapping of ctrl-c in Insert mode |
| set cpo-=< cpo-=k |
| inoremap <c-c> <ctrl-c> |
| cnoremap <c-c> dummy |
| cunmap <c-c> |
| call feedkeys("GoTEST2: CTRL-C |\<C-C>A|\<Esc>", "xt") |
| call assert_equal('TEST2: CTRL-C |<ctrl-c>A|', getline('$')) |
| unmap! <c-c> |
| set nomodified |
| endfunc |
| |
| func Test_map_ctrl_c_visual() |
| " mapping of ctrl-c in Visual mode |
| vnoremap <c-c> :<C-u>$put ='vmap works' |
| call feedkeys("GV\<C-C>\<CR>", "xt") |
| call assert_equal('vmap works', getline('$')) |
| vunmap <c-c> |
| set nomodified |
| endfunc |
| |
| func Test_map_langmap() |
| " langmap should not get remapped in insert mode |
| inoremap { FAIL_ilangmap |
| set langmap=+{ langnoremap |
| call feedkeys("Go+\<Esc>", "xt") |
| call assert_equal('+', getline('$')) |
| |
| " Insert-mode expr mapping with langmap |
| inoremap <expr> { "FAIL_iexplangmap" |
| call feedkeys("Go+\<Esc>", "xt") |
| call assert_equal('+', getline('$')) |
| iunmap <expr> { |
| |
| " langmap should not get remapped in Command-line mode |
| cnoremap { FAIL_clangmap |
| call feedkeys(":call append(line('$'), '+')\<CR>", "xt") |
| call assert_equal('+', getline('$')) |
| cunmap { |
| |
| " Command-line mode expr mapping with langmap |
| cnoremap <expr> { "FAIL_cexplangmap" |
| call feedkeys(":call append(line('$'), '+')\<CR>", "xt") |
| call assert_equal('+', getline('$')) |
| cunmap { |
| set nomodified |
| endfunc |
| |
| func Test_map_feedkeys() |
| " issue #212 (feedkeys insert mapping at current position) |
| nnoremap . :call feedkeys(".", "in")<cr> |
| call setline('$', ['a b c d', 'a b c d']) |
| $-1 |
| call feedkeys("0qqdw.ifoo\<Esc>qj0@q\<Esc>", "xt") |
| call assert_equal(['fooc d', 'fooc d'], getline(line('$') - 1, line('$'))) |
| unmap . |
| set nomodified |
| endfunc |
| |
| func Test_map_cursor() |
| " <c-g>U<cursor> works only within a single line |
| imapclear |
| imap ( ()<c-g>U<left> |
| call feedkeys("G2o\<Esc>ki\<CR>Test1: text with a (here some more text\<Esc>k.", "xt") |
| call assert_equal('Test1: text with a (here some more text)', getline(line('$') - 2)) |
| call assert_equal('Test1: text with a (here some more text)', getline(line('$') - 1)) |
| |
| " test undo |
| call feedkeys("G2o\<Esc>ki\<CR>Test2: text wit a (here some more text [und undo]\<C-G>u\<Esc>k.u", "xt") |
| call assert_equal('', getline(line('$') - 2)) |
| call assert_equal('Test2: text wit a (here some more text [und undo])', getline(line('$') - 1)) |
| set nomodified |
| imapclear |
| endfunc |
| |
| " This isn't actually testing a mapping, but similar use of CTRL-G U as above. |
| func Test_break_undo() |
| :set whichwrap=<,>,[,] |
| call feedkeys("G4o2k", "xt") |
| exe ":norm! iTest3: text with a (parenthesis here\<C-G>U\<Right>new line here\<esc>\<up>\<up>." |
| call assert_equal('new line here', getline(line('$') - 3)) |
| call assert_equal('Test3: text with a (parenthesis here', getline(line('$') - 2)) |
| call assert_equal('new line here', getline(line('$') - 1)) |
| set nomodified |
| endfunc |
| |
| func Test_map_meta_quotes() |
| imap <M-"> foo |
| call feedkeys("Go-\<M-\">-\<Esc>", "xt") |
| call assert_equal("-foo-", getline('$')) |
| set nomodified |
| iunmap <M-"> |
| endfunc |