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:
@@ -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
|
||||
|
Reference in New Issue
Block a user