1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 13:50:04 +08:00
SpaceVim/bundle/vim-over/autoload/over/command_line/global.vim
2022-06-10 16:31:14 +08:00

57 lines
1.5 KiB
VimL

scriptencoding utf-8
let s:save_cpo = &cpo
set cpo&vim
" 0 = match just the pattern
" 1 = match whole line
let g:over#command_line#global#highlight_line = get(g:, "over#command_line#global#highlight_line", 0)
" 0 = do nothing
" 1 = highlight all lines not matching pattern
let g:over#command_bang#global#highlight_bang = get(g:, "over#command_bang#global#highlight_bang", 1)
function! over#command_line#global#load()
" load
endfunction
function! s:search_hl_off()
if exists("s:search_id") && s:search_id != -1
call matchdelete(s:search_id)
unlet s:search_id
endif
endfunction
function! s:search_hl_on(pattern, bang)
let pattern = g:over#command_line#global#highlight_line ?
\ '.*' . a:pattern . '.*' : a:pattern
let pattern = a:bang && g:over#command_bang#global#highlight_bang ?
\ '^\%(\%(' . pattern . '\)\@!.\)*$' : pattern
silent! let s:search_id = matchadd("IncSearch", a:pattern)
endfunction
function! s:main()
call s:search_hl_off()
let line = over#command_line#backward()
if line =~ '\v^\%g!?\/.'
let bang = line =~ 'g!\/'
let pattern = matchstr(line, '\v\%g!?\/\zs%(\\\/|[^/])+')
call s:search_hl_on((&ignorecase ? '\c' : '') . pattern, bang)
endif
endfunction
augroup over-cmdline-global
autocmd!
autocmd User OverCmdLineChar call s:main()
autocmd User OverCmdLineLeave call s:search_hl_off()
autocmd User OverCmdLineEnter let s:old_pos = getpos(".")
autocmd User OverCmdLineExecutePre call setpos(".", s:old_pos)
augroup END
let &cpo = s:save_cpo
unlet s:save_cpo