0
0
mirror of https://github.com/vim/vim.git synced 2025-10-02 05:04:20 -04:00

patch 8.2.3110: a pattern that matches the cursor position is complicated

Problem:    A pattern that matches the cursor position is bit complicated.
Solution:   Use a dot to indicate the cursor line and column. (Christian
            Brabandt, closes #8497, closes #8179)
This commit is contained in:
Bram Moolenaar
2021-07-05 20:15:23 +02:00
parent f6d877975b
commit 04db26b360
6 changed files with 183 additions and 6 deletions

View File

@@ -947,4 +947,94 @@ func Test_regexp_last_subst_string()
close!
endfunc
" Check patterns matching cursor position.
func s:curpos_test2()
new
call setline(1, ['1', '2 foobar eins zwei drei vier f<>nf sechse',
\ '3 foobar eins zwei drei vier f<>nf sechse',
\ '4 foobar eins zwei drei vier f<>nf sechse',
\ '5 foobar eins zwei drei vier f<>nf sechse',
\ '6 foobar eins zwei drei vier f<>nf sechse',
\ '7 foobar eins zwei drei vier f<>nf sechse'])
call setpos('.', [0, 2, 10, 0])
s/\%.c.*//g
call setpos('.', [0, 3, 15, 0])
s/\%.l.*//g
call setpos('.', [0, 5, 3, 0])
s/\%.v.*/_/g
call assert_equal(['1',
\ '2 foobar ',
\ '',
\ '4 foobar eins zwei drei vier f<>nf sechse',
\ '5 _',
\ '6 foobar eins zwei drei vier f<>nf sechse',
\ '7 foobar eins zwei drei vier f<>nf sechse'],
\ getline(1, '$'))
call assert_fails('call search("\\%.1l")', 'E1204:')
call assert_fails('call search("\\%.1c")', 'E1204:')
call assert_fails('call search("\\%.1v")', 'E1204:')
bwipe!
endfunc
" Check patterns matching before or after cursor position.
func s:curpos_test3()
new
call setline(1, ['1', '2 foobar eins zwei drei vier f<>nf sechse',
\ '3 foobar eins zwei drei vier f<>nf sechse',
\ '4 foobar eins zwei drei vier f<>nf sechse',
\ '5 foobar eins zwei drei vier f<>nf sechse',
\ '6 foobar eins zwei drei vier f<>nf sechse',
\ '7 foobar eins zwei drei vier f<>nf sechse'])
call setpos('.', [0, 2, 10, 0])
" Note: This removes all columns, except for the column directly in front of
" the cursor. Bug????
:s/^.*\%<.c//
call setpos('.', [0, 3, 10, 0])
:s/\%>.c.*$//
call setpos('.', [0, 5, 4, 0])
" Note: This removes all columns, except for the column directly in front of
" the cursor. Bug????
:s/^.*\%<.v/_/
call setpos('.', [0, 6, 4, 0])
:s/\%>.v.*$/_/
call assert_equal(['1',
\ ' eins zwei drei vier f<>nf sechse',
\ '3 foobar e',
\ '4 foobar eins zwei drei vier f<>nf sechse',
\ '_foobar eins zwei drei vier f<>nf sechse',
\ '6 fo_',
\ '7 foobar eins zwei drei vier f<>nf sechse'],
\ getline(1, '$'))
sil %d
call setline(1, ['1', '2 foobar eins zwei drei vier f<>nf sechse',
\ '3 foobar eins zwei drei vier f<>nf sechse',
\ '4 foobar eins zwei drei vier f<>nf sechse',
\ '5 foobar eins zwei drei vier f<>nf sechse',
\ '6 foobar eins zwei drei vier f<>nf sechse',
\ '7 foobar eins zwei drei vier f<>nf sechse'])
call setpos('.', [0, 4, 4, 0])
%s/\%<.l.*//
call setpos('.', [0, 5, 4, 0])
%s/\%>.l.*//
call assert_equal(['', '', '',
\ '4 foobar eins zwei drei vier f<>nf sechse',
\ '5 foobar eins zwei drei vier f<>nf sechse',
\ '', ''],
\ getline(1, '$'))
bwipe!
endfunc
" Test that matching below, at or after the
" cursor position work
func Test_matching_pos()
for val in range(3)
exe "set re=" .. val
" Match at cursor position
call s:curpos_test2()
" Match before or after cursor position
call s:curpos_test3()
endfor
set re&
endfunc
" vim: shiftwidth=2 sts=2 expandtab