Skip to content

Commit 2c23ef6

Browse files
committed
support incsearch
1 parent 37e7c2f commit 2c23ef6

1 file changed

Lines changed: 62 additions & 13 deletions

File tree

plugin/incsearch.vim

Lines changed: 62 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,36 +27,85 @@ function! s:onUpdate()
2727
if empty(cmd)
2828
return
2929
endif
30-
let hlsearchSaved = &hlsearch
31-
set nohlsearch
30+
let pattern = E2v(cmd['pattern'])
31+
32+
if !exists('s:hlsearchSaved')
33+
let s:hlsearchSaved = &hlsearch
34+
endif
3235
if !exists('s:patternSaved')
3336
let s:patternSaved = @/
3437
if !has('nvim')
3538
let s:eregex_incsearch_abort = 1
3639
endif
3740
endif
38-
let @/ = E2v(cmd['pattern'])
39-
if hlsearchSaved
41+
if !exists('s:stateSaved')
42+
let s:stateSaved = winsaveview()
43+
endif
44+
45+
set nohlsearch
46+
47+
if !empty(pattern)
48+
let @/ = pattern
49+
50+
let pos = searchpos(pattern, 'cnw')
51+
if pos[0] > 0 && pos[1] > 0
52+
if pos[1] > 1
53+
let pos[1] -= 1
54+
endif
55+
let curpos = getpos('.')
56+
let curpos[1] = pos[0]
57+
let curpos[2] = pos[1]
58+
call setpos('.', curpos)
59+
endif
60+
endif
61+
62+
if s:hlsearchSaved && !empty(pattern)
4063
set hlsearch
64+
else
65+
set nohlsearch
4166
endif
4267
redraw
4368
endfunction
4469

4570
function! s:onLeave()
46-
if !exists('s:patternSaved')
47-
return
71+
if exists('s:hlsearchSaved')
72+
let hlsearchSaved = s:hlsearchSaved
73+
unlet s:hlsearchSaved
74+
endif
75+
if exists('s:patternSaved')
76+
let patternSaved = s:patternSaved
77+
unlet s:patternSaved
78+
endif
79+
if exists('s:stateSaved')
80+
let stateSaved = s:stateSaved
81+
unlet s:stateSaved
82+
endif
83+
84+
if exists('hlsearchSaved')
85+
if hlsearchSaved
86+
set hlsearch
87+
else
88+
set nohlsearch
89+
endif
4890
endif
49-
let patternSaved = s:patternSaved
50-
unlet s:patternSaved
91+
5192
if has('nvim')
5293
let abort = get(v:event, 'abort', 0)
5394
else
5495
let abort = get(s:, 'eregex_incsearch_abort', 0)
5596
endif
56-
if abort
97+
if !abort
98+
return
99+
endif
100+
101+
if exists('patternSaved')
57102
let @/ = patternSaved
58-
redraw!
59103
endif
104+
if exists('stateSaved')
105+
call winrestview(stateSaved)
106+
endif
107+
108+
redraw!
60109
endfunction
61110

62111
" input: M/abc
@@ -72,8 +121,8 @@ endfunction
72121
" }
73122
function! s:cmdParse(cmdline)
74123
let token = nr2char(127)
75-
let items = split(substitute(a:cmdline, '\\/', token, 'g'), '/')
76-
if len(items) <= 1
124+
let items = split(substitute(a:cmdline, '\\/', token, 'g'), '/', 1)
125+
if len(items) < 2
77126
return {}
78127
endif
79128
let modes = get(g:, 'eregex_incsearch_modes', get(b:, 'eregex_incsearch_modes', 'MSGV'))
@@ -84,7 +133,7 @@ function! s:cmdParse(cmdline)
84133
endif
85134
return {
86135
\ 'method' : method,
87-
\ 'pattern' : substitute(items[1], token, '\\/', 'g'),
136+
\ 'pattern' : substitute(get(items, 1, ''), token, '\\/', 'g'),
88137
\ }
89138
endfunction
90139

0 commit comments

Comments
 (0)