16835dc61SBram Moolenaar" Test for gn command 26835dc61SBram Moolenaar 36835dc61SBram Moolenaarfunc Test_gn_command() 4add8dce3SBram Moolenaar noautocmd new 5037c54f2SBram Moolenaar " replace a single char by itself quoted: 66835dc61SBram Moolenaar call setline('.', 'abc x def x ghi x jkl') 76835dc61SBram Moolenaar let @/ = 'x' 86835dc61SBram Moolenaar exe "norm! cgn'x'\<esc>.." 96835dc61SBram Moolenaar call assert_equal("abc 'x' def 'x' ghi 'x' jkl", getline('.')) 106835dc61SBram Moolenaar sil! %d_ 11add8dce3SBram Moolenaar 126835dc61SBram Moolenaar " simple search match 136835dc61SBram Moolenaar call setline('.', 'foobar') 146835dc61SBram Moolenaar let @/ = 'foobar' 156835dc61SBram Moolenaar exe "norm! gncsearchmatch" 166835dc61SBram Moolenaar call assert_equal('searchmatch', getline('.')) 176835dc61SBram Moolenaar sil! %d _ 18add8dce3SBram Moolenaar 196835dc61SBram Moolenaar " replace a multi-line match 206835dc61SBram Moolenaar call setline('.', ['', 'one', 'two']) 216835dc61SBram Moolenaar let @/ = 'one\_s*two\_s' 226835dc61SBram Moolenaar exe "norm! gnceins\<CR>zwei" 236835dc61SBram Moolenaar call assert_equal(['','eins','zwei'], getline(1,'$')) 246835dc61SBram Moolenaar sil! %d _ 25add8dce3SBram Moolenaar 266835dc61SBram Moolenaar " test count argument 276835dc61SBram Moolenaar call setline('.', ['', 'abcdx | abcdx | abcdx']) 286835dc61SBram Moolenaar let @/ = '[a]bcdx' 296835dc61SBram Moolenaar exe "norm! 2gnd" 306835dc61SBram Moolenaar call assert_equal(['','abcdx | | abcdx'], getline(1,'$')) 316835dc61SBram Moolenaar sil! %d _ 32add8dce3SBram Moolenaar 336835dc61SBram Moolenaar " join lines 346835dc61SBram Moolenaar call setline('.', ['join ', 'lines']) 356835dc61SBram Moolenaar let @/ = '$' 366835dc61SBram Moolenaar exe "norm! 0gnd" 376835dc61SBram Moolenaar call assert_equal(['join lines'], getline(1,'$')) 386835dc61SBram Moolenaar sil! %d _ 39add8dce3SBram Moolenaar 406835dc61SBram Moolenaar " zero-width match 416835dc61SBram Moolenaar call setline('.', ['', 'zero width pattern']) 426835dc61SBram Moolenaar let @/ = '\>\zs' 436835dc61SBram Moolenaar exe "norm! 0gnd" 446835dc61SBram Moolenaar call assert_equal(['', 'zerowidth pattern'], getline(1,'$')) 456835dc61SBram Moolenaar sil! %d _ 46add8dce3SBram Moolenaar 476835dc61SBram Moolenaar " delete first and last chars 486835dc61SBram Moolenaar call setline('.', ['delete first and last chars']) 496835dc61SBram Moolenaar let @/ = '^' 506835dc61SBram Moolenaar exe "norm! 0gnd$" 516835dc61SBram Moolenaar let @/ = '\zs' 526835dc61SBram Moolenaar exe "norm! gnd" 536835dc61SBram Moolenaar call assert_equal(['elete first and last char'], getline(1,'$')) 546835dc61SBram Moolenaar sil! %d _ 55add8dce3SBram Moolenaar 566835dc61SBram Moolenaar " using visual mode 576835dc61SBram Moolenaar call setline('.', ['', 'uniquepattern uniquepattern']) 586835dc61SBram Moolenaar exe "norm! /[u]niquepattern/s\<cr>vlgnd" 596835dc61SBram Moolenaar call assert_equal(['', ' uniquepattern'], getline(1,'$')) 606835dc61SBram Moolenaar sil! %d _ 61add8dce3SBram Moolenaar 626835dc61SBram Moolenaar " backwards search 636835dc61SBram Moolenaar call setline('.', ['my very excellent mother just served us nachos']) 646835dc61SBram Moolenaar let @/ = 'mother' 656835dc61SBram Moolenaar exe "norm! $cgNmongoose" 666835dc61SBram Moolenaar call assert_equal(['my very excellent mongoose just served us nachos'], getline(1,'$')) 676835dc61SBram Moolenaar sil! %d _ 68add8dce3SBram Moolenaar 696835dc61SBram Moolenaar " search for single char 706835dc61SBram Moolenaar call setline('.', ['','for (i=0; i<=10; i++)']) 716835dc61SBram Moolenaar let @/ = 'i' 726835dc61SBram Moolenaar exe "norm! cgnj" 736835dc61SBram Moolenaar call assert_equal(['','for (j=0; i<=10; i++)'], getline(1,'$')) 746835dc61SBram Moolenaar sil! %d _ 75add8dce3SBram Moolenaar 766835dc61SBram Moolenaar " search hex char 776835dc61SBram Moolenaar call setline('.', ['','Y']) 786835dc61SBram Moolenaar set noignorecase 796835dc61SBram Moolenaar let @/ = '\%x59' 806835dc61SBram Moolenaar exe "norm! gnd" 816835dc61SBram Moolenaar call assert_equal(['',''], getline(1,'$')) 826835dc61SBram Moolenaar sil! %d _ 83add8dce3SBram Moolenaar 846835dc61SBram Moolenaar " test repeating gdn 856835dc61SBram Moolenaar call setline('.', ['', '1', 'Johnny', '2', 'Johnny', '3']) 866835dc61SBram Moolenaar let @/ = 'Johnny' 876835dc61SBram Moolenaar exe "norm! dgn." 886835dc61SBram Moolenaar call assert_equal(['','1', '', '2', '', '3'], getline(1,'$')) 896835dc61SBram Moolenaar sil! %d _ 90add8dce3SBram Moolenaar 916835dc61SBram Moolenaar " test repeating gUgn 926835dc61SBram Moolenaar call setline('.', ['', '1', 'Depp', '2', 'Depp', '3']) 936835dc61SBram Moolenaar let @/ = 'Depp' 946835dc61SBram Moolenaar exe "norm! gUgn." 956835dc61SBram Moolenaar call assert_equal(['', '1', 'DEPP', '2', 'DEPP', '3'], getline(1,'$')) 966835dc61SBram Moolenaar sil! %d _ 97add8dce3SBram Moolenaar 986835dc61SBram Moolenaar " test using look-ahead assertions 996835dc61SBram Moolenaar call setline('.', ['a:10', '', 'a:1', '', 'a:20']) 1006835dc61SBram Moolenaar let @/ = 'a:0\@!\zs\d\+' 1016835dc61SBram Moolenaar exe "norm! 2nygno\<esc>p" 1026835dc61SBram Moolenaar call assert_equal(['a:10', '', 'a:1', '1', '', 'a:20'], getline(1,'$')) 1036835dc61SBram Moolenaar sil! %d _ 104add8dce3SBram Moolenaar 105add8dce3SBram Moolenaar " test using nowrapscan 106add8dce3SBram Moolenaar set nowrapscan 107add8dce3SBram Moolenaar call setline(1, 'foo bar baz') 108add8dce3SBram Moolenaar exe "norm! /bar/e\<cr>" 109add8dce3SBram Moolenaar exe "norm! gnd" 110add8dce3SBram Moolenaar call assert_equal(['foo baz'], getline(1,'$')) 111add8dce3SBram Moolenaar sil! %d_ 112add8dce3SBram Moolenaar 11322ab547dSBram Moolenaar " search upwards with nowrapscan set 11422ab547dSBram Moolenaar call setline('.', ['foo', 'bar', 'foo', 'baz']) 11522ab547dSBram Moolenaar set nowrapscan 11622ab547dSBram Moolenaar let @/ = 'foo' 11722ab547dSBram Moolenaar $ 11822ab547dSBram Moolenaar norm! dgN 11922ab547dSBram Moolenaar call assert_equal(['foo', 'bar', '', 'baz'], getline(1,'$')) 120bdb65792SBram Moolenaar sil! %d_ 121bdb65792SBram Moolenaar 122bdb65792SBram Moolenaar " search using the \zs atom 123bdb65792SBram Moolenaar call setline(1, [' nnoremap', '', 'nnoremap']) 124bdb65792SBram Moolenaar set wrapscan&vim 125bdb65792SBram Moolenaar let @/ = '\_s\zsnnoremap' 126bdb65792SBram Moolenaar $ 127bdb65792SBram Moolenaar norm! cgnmatch 128bdb65792SBram Moolenaar call assert_equal([' nnoremap', '', 'match'], getline(1,'$')) 12922ab547dSBram Moolenaar sil! %d_ 13022ab547dSBram Moolenaar 131edaad6e0SBram Moolenaar " make sure it works correctly for one-char wide search items 132edaad6e0SBram Moolenaar call setline('.', ['abcdefghi']) 133edaad6e0SBram Moolenaar let @/ = 'a' 134edaad6e0SBram Moolenaar exe "norm! 0fhvhhgNgU" 135edaad6e0SBram Moolenaar call assert_equal(['ABCDEFGHi'], getline(1,'$')) 136edaad6e0SBram Moolenaar call setline('.', ['abcdefghi']) 137edaad6e0SBram Moolenaar let @/ = 'b' 13882cf7f6dSBram Moolenaar " this gn wraps around the end of the file 139edaad6e0SBram Moolenaar exe "norm! 0fhvhhgngU" 14082cf7f6dSBram Moolenaar call assert_equal(['aBCDEFGHi'], getline(1,'$')) 141edaad6e0SBram Moolenaar sil! %d _ 142edaad6e0SBram Moolenaar call setline('.', ['abcdefghi']) 143edaad6e0SBram Moolenaar let @/ = 'f' 144edaad6e0SBram Moolenaar exe "norm! 0vllgngU" 145edaad6e0SBram Moolenaar call assert_equal(['ABCDEFghi'], getline(1,'$')) 146edaad6e0SBram Moolenaar sil! %d _ 147edaad6e0SBram Moolenaar call setline('.', ['12345678']) 148edaad6e0SBram Moolenaar let @/ = '5' 149edaad6e0SBram Moolenaar norm! gg0f7vhhhhgnd 150edaad6e0SBram Moolenaar call assert_equal(['12348'], getline(1,'$')) 151edaad6e0SBram Moolenaar sil! %d _ 152453c1925SBram Moolenaar call setline('.', ['12345678']) 153453c1925SBram Moolenaar let @/ = '5' 154453c1925SBram Moolenaar norm! gg0f2vf7gNd 155453c1925SBram Moolenaar call assert_equal(['1678'], getline(1,'$')) 156453c1925SBram Moolenaar sil! %d _ 157add8dce3SBram Moolenaar set wrapscan&vim 158224a5f17SBram Moolenaar 159224a5f17SBram Moolenaar " Without 'wrapscan', in visual mode, running gn without a match should fail 160224a5f17SBram Moolenaar " but the visual mode should be kept. 161224a5f17SBram Moolenaar set nowrapscan 162224a5f17SBram Moolenaar call setline('.', 'one two') 163224a5f17SBram Moolenaar let @/ = 'one' 164224a5f17SBram Moolenaar call assert_beeps('normal 0wvlgn') 165224a5f17SBram Moolenaar exe "normal y" 166224a5f17SBram Moolenaar call assert_equal('tw', @") 167224a5f17SBram Moolenaar 168224a5f17SBram Moolenaar " with exclusive selection, run gn and gN 169224a5f17SBram Moolenaar set selection=exclusive 170224a5f17SBram Moolenaar normal 0gny 171224a5f17SBram Moolenaar call assert_equal('one', @") 172224a5f17SBram Moolenaar normal 0wgNy 173224a5f17SBram Moolenaar call assert_equal('one', @") 174224a5f17SBram Moolenaar set selection& 17528f224b2SBram Moolenaarendfunc 17628f224b2SBram Moolenaar 17728f224b2SBram Moolenaarfunc Test_gN_repeat() 17828f224b2SBram Moolenaar new 17928f224b2SBram Moolenaar call setline(1, 'this list is a list with a list of a list.') 18028f224b2SBram Moolenaar /list 18128f224b2SBram Moolenaar normal $gNgNgNx 18228f224b2SBram Moolenaar call assert_equal('list with a list of a list', @") 18328f224b2SBram Moolenaar bwipe! 18428f224b2SBram Moolenaarendfunc 1856835dc61SBram Moolenaar 186*c07b7f70SBram Moolenaarfunc Test_gN_then_gn() 187*c07b7f70SBram Moolenaar new 188*c07b7f70SBram Moolenaar 189*c07b7f70SBram Moolenaar call setline(1, 'this list is a list with a list of a last.') 190*c07b7f70SBram Moolenaar /l.st 191*c07b7f70SBram Moolenaar normal $gNgNgnx 192*c07b7f70SBram Moolenaar call assert_equal('last', @") 193*c07b7f70SBram Moolenaar 194*c07b7f70SBram Moolenaar call setline(1, 'this list is a list with a lust of a last.') 195*c07b7f70SBram Moolenaar /l.st 196*c07b7f70SBram Moolenaar normal $gNgNgNgnx 197*c07b7f70SBram Moolenaar call assert_equal('lust of a last', @") 198*c07b7f70SBram Moolenaar 199*c07b7f70SBram Moolenaar bwipe! 200*c07b7f70SBram Moolenaarendfunc 201*c07b7f70SBram Moolenaar 2025d24a225SBram Moolenaarfunc Test_gn_multi_line() 2035d24a225SBram Moolenaar new 2045d24a225SBram Moolenaar call setline(1, [ 2055d24a225SBram Moolenaar \ 'func Tm1()', 2065d24a225SBram Moolenaar \ ' echo "one"', 2075d24a225SBram Moolenaar \ 'endfunc', 2085d24a225SBram Moolenaar \ 'func Tm2()', 2095d24a225SBram Moolenaar \ ' echo "two"', 2105d24a225SBram Moolenaar \ 'endfunc', 2115d24a225SBram Moolenaar \ 'func Tm3()', 2125d24a225SBram Moolenaar \ ' echo "three"', 2135d24a225SBram Moolenaar \ 'endfunc', 2145d24a225SBram Moolenaar \]) 2155d24a225SBram Moolenaar /\v^func Tm\d\(\)\n.*\zs".*"\ze$ 2165d24a225SBram Moolenaar normal jgnrx 2175d24a225SBram Moolenaar call assert_equal(' echo xxxxx', getline(5)) 2185d24a225SBram Moolenaar bwipe! 2195d24a225SBram Moolenaarendfunc 2205d24a225SBram Moolenaar 2219e4d8215SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 222