On 05/03/10 04:12, John Beckett wrote:
Paul wrote:
I'm not sure what this is supposed to look like. I put it in
my .vimrc (after unwrapping the line) and opened another
file, set hls and did a search. All search results looked
exactly as they do normally, even after specifically :so'ing
my .vimrc again...
The reason is in your (Paul's) next post in this thread (where you
snipped away the function below): you are using vim in console, but this
SearchCurrent highlight, as defined below, only sets guifg= guibg=
colours. IOW, it will only work in gvim, unless you add
ctermbg=<something> and/or ctermfg=<something> to that SearchCurrent
highlight.
After moving the cursor (say with n to find next occurrence),
you should see the current search hit highlighted with a
DarkOrange background, while other hits are highlighted with
a Yellow background (if you have the default Search highlight
group).
The 'b:xxx' variables should be 'w:xxx', and I have started
playing with the script because it has an irritating feature:
if you search for "the" then it works nicely, but when you use
:noh to turn off highlighting, the first "the" after the cursor
(on the cursor line) will be highlighted with DarkOrange.
I haven't given it serious attention yet, but here is what I
came up with to make it somewhat usable (still needs work).
This is based on the idea by Matt Wozniski 2010-02-24.
I put the script in file highlight-current.vim in my plugin
directory. Some lines will wrap.
---start---
" Highlight current search hit so can easily see it if many hits.
if v:version< 702 || exists('loaded_highlightcurrent') ||&cp
finish
endif
let loaded_highlightcurrent = 1
highlight SearchCurrent guifg=black guibg=DarkOrange
function! s:SetHighlightCurrent(enable)
if a:enable
augroup highlight_current
autocmd!
autocmd CursorMoved * silent call s:HighlightCurrent(1)
augroup END
call s:HighlightCurrent(1)
else
autocmd! highlight_current
call s:HighlightCurrent(0)
endif
endfunction
function! s:HighlightCurrent(show)
if exists('w:searchmatch')
" Ignore any error because user might have cleared all matches.
silent! call matchdelete(w:searchmatch)
unlet w:searchmatch
endif
if a:show&& !empty(@/)
let beg = searchpos(@/, 'cnW', line('.'), 100)
if beg != [0, 0]
let end = searchpos(@/, 'cenW', line('.'), 100)
if end != [0, 0]
let w:searchmatch = matchadd('SearchCurrent',
printf('\%%%dl\%%%dc\_.*\%%%dl\%%%dc.', beg[0], beg[1], end[0], end[1]))
endif
endif
endif
endfunction
call s:SetHighlightCurrent(1)
nnoremap<silent> <Space>
:nohlsearch<Bar>:call<SID>SetHighlightCurrent(0)<Bar>:echo<CR>
nnoremap<silent> <S-Space> :set
hlsearch<Bar>:call<SID>SetHighlightCurrent(1)<Bar>:echo<CR>
" Could remap n and N so they enable highlight current.
" nnoremap<silent> n n:call<SID>SetHighlightCurrent(1)<CR>
" nnoremap<silent> N N:call<SID>SetHighlightCurrent(1)<CR>
---end---
After searching, pressing Space will clear all search
highlights. Press Shift-Space to enable the DarkOrange
highlighting of the current hit.
John
Best regards,
Tony.
--
Everyone talks about apathy, but no one _does_ anything about it.
--
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