Monday, August 22, 2011

Re: Detect whether search highlighting is active

On 08/21/2011 11:58 PM, John Beckett wrote:
> I just reworked an interesting idea added to this tip:
> http://vim.wikia.com/wiki/Highlight_all_search_pattern_matches
>
> The following script means you can press Enter to toggle search
> highlighting for the current word on and off (without moving the
> cursor). I did not think I would want this, but it's strangely
> attractive.
>
> let g:highlighting = 0
> function! Highlighting()
> if g:highlighting == 1&& @/ =~ '^\\<'.expand('<cword>').'\\>$'
> let g:highlighting = 0
> return ":silent nohlsearch\<CR>"
> endif
> let @/ = '\<'.expand('<cword>').'\>'
> let g:highlighting = 1
> return ":silent set hlsearch\<CR>"
> endfunction
> nnoremap<silent> <expr> <CR> Highlighting()
>
> Question: Can a script detect whether search highlighting is
> currently active? The above uses a global variable as a
> workaround

Well, you always have access to &hls as a variable, so you can do
things like

function! Highlighting()
let l:search = '\<'.expand('<cword>').'\>'
if &hls == 1 && @/ == l:search
return ":silent set nohls\<cr>"
endif
let @/ = l:search
return ":silent set hls\<cr>"
endfunction
nnoremap <silent> <expr> <cr> Highlighting()

With a little thought, one might be able to smash this into a
one-liner non-<expr> mapping, but the readability of the function
is a bit easier.

-tkc

endif

--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

No comments: