xref: /vim-8.2.3635/src/testdir/test_gn.vim (revision c07b7f70)
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