" 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() endif " call s:AutocmdOff() endfunction function! s:AddMapping(cmdwin_char) " silent! cnoremap :nohlsearch " 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:Deactivate() call s:RemoveMapping() call s:AutocmdOff() endfunction " 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('')) autocmd CmdlineLeave [/\?] call s:Deactivate() augroup END endfunction function! s:AutocmdOff() autocmd! nohai endfunction 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) 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('/')