From 8dbc86b703845ac43bf5845de148ba582c9277de Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 14 Dec 2019 15:40:28 +0100 Subject: Mostly working nohilight searching, works with regular search A little convoluted here from the iterative changes, but managed to get nohilight searching working alongside regular searching. Backward searching isn't working, a connection in the pipeline is missing somewhere. I think this can be simplified quite a lot, but nice to have something working. --- plugin/nohai.vim | 95 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 76 insertions(+), 19 deletions(-) (limited to 'plugin') diff --git a/plugin/nohai.vim b/plugin/nohai.vim index cdde8c3..db66774 100644 --- a/plugin/nohai.vim +++ b/plugin/nohai.vim @@ -1,51 +1,108 @@ -augroup nohai - autocmd! - - " autocmd CmdlineLeave * call s:Nohai(expand('')) - autocmd CmdlineEnter [/?] call s:Nohai(expand('')) -augroup END +" augroup nohai +" autocmd! +" +" " autocmd CmdlineLeave * call s:Nohai(expand('')) +" autocmd CmdlineEnter [/?] call s:Nohai(expand('')) +" augroup END function! s:Nohai(cmdwin_char) + echom 'called ' . a:cmdwin_char if a:cmdwin_char == '/' || a:cmdwin_char == '?' " nohlsearch " ^ doesn't work because the autocommand executes before leaving the " command line window call s:AddMapping(a:cmdwin_char) - else - call s:RemoveMapping() + " else + " call s:RemoveMapping() endif + + call s:AutocmdOff() endfunction function! s:AddMapping(cmdwin_char) " silent! cnoremap :nohlsearch - silent! cnoremap s:CR(a:cmdwin_char) + " silent! cnoremap s:CR(a:cmdwin_char) + " silent! cnoremap CR(a:cmdwin_char) + " silent! cnoremap CR('/') + + if a:cmdwin_char == '/' || a:cmdwin_char == '?' + silent! cnoremap CR() + endif endfunction function! s:RemoveMapping() silent! cunmap endfunction -function! s:CR(cmdwin_char) - if a:cmdwin_char == '/' || a:cmdwin_char == '?' - return ':nohlsearch' - " ... and unmap - else - return '' - endif +" function! s:CR(cmdwin_char) +" if a:cmdwin_char == '/' || a:cmdwin_char == '?' +" return "\:nohlsearch\" +" " ... and unmap +" else +" return "\" +" endif +" endfunction + +function! s:CR() + " return "\:nohlsearch\" + + " let expr = '' + " let expr .= "\:nohlsearch\" + " let expr .= ":call s:RemoveMapping()\" + " + " return expr + + " TODO: Use CmdlineLeave instead for e.g. + call s:RemoveMapping() + + return "\:nohlsearch\" +endfunction + +function! s:AutocmdOn() + echom 'Turning on autocmd' + augroup nohai + autocmd! + + autocmd CmdlineEnter [/?] call s:Nohai(expand('')) + augroup END +endfunction + +function! s:AutocmdOff() + autocmd! nohai endfunction -function! s:Search() +function! s:Search(command) + echom 'Searching with ' . a:command " let s:on = 1 " 1. Turn on autocmd " 2. Search (find out if this is blocked by function-search-undo) " 2.a. Search automatically disables autocmd + + call s:AutocmdOn() + + return a:command + + " let expr = '' + " + " let expr .= ":call s:AutocmdOn()\" + " let expr .= a:command + " + " return expr endfunction +" Impl idea 2 +" autocmd is activated on init +" Search() from g/? mapping sets a script-local flag and exprs to /? +" s:Nohai() -nnoremap (nohai-search-backward) :call s:Search() -nnoremap (nohai-search) :call s:Search() +nnoremap (nohai-search-backward) Search('?') +nnoremap (nohai-search) Search('/') nmap g? (nohai-search-backward) nmap g/ (nohai-search) + +" Using SID outside of script context? +" nnoremap g? Search('?') +" nnoremap g/ Search('/') -- cgit v1.2.3