mileszs / ack.vim

Vim plugin for the Perl module / CLI script 'ack'
Other
3.08k stars 396 forks source link

no highlighting when searching with regrex #226

Open mboughaba opened 6 years ago

mboughaba commented 6 years ago

Hi,

let g:ackhighlight = 1

When searching with regex, the matching searched term is not highlighted.

Ack! "TODO|FIXME|NOTE|HACK")

This is the code which is doing the highlighting

function! s:Highlight(args) "{{{
  if !g:ackhighlight
    return
  endif

  let @/ = matchstr(a:args, "\\v(-)\@<!(\<)\@<=\\w+|['\"]\\zs.{-}\\ze['\"]")
  call feedkeys(":let &hlsearch=1 \| echo \<CR>", "n")
endfunction "}}}

Have no idea how to start with that matchstr :rofl:

ches commented 6 years ago

Yeah the highlighting "support" is and might always be a hack, because of course ack's regex engine is entirely different from Vim's. If anyone has ideas on improving it though, I'm open to them. Maybe there's some portable-ish way to "pass through" match information better.

Might relate to #214.

mboughaba commented 6 years ago

Hi @ches

Coming back to the same example:

Ack! "TODO|FIXME|NOTE|HACK"

It is possible to highlight all the matches simply by using vim's built-in hlsearch.

what I suggest

When searching using Ack we could set the highlighting in vim to match the exact pattern given to ack, in this case /\vFIXME\|TODO\|HACK\|NOTE. And of course we can always revert back to user's last search after that the quickfix is closed.

This behavior is to be enabled when g:ackhighlight = 1

What do you think? I am waiting for feedback to drop a PR.

Cheers, Mo.

petdance commented 6 years ago

I don't think that's going to work because vim + ack's regexes are so very different.

ubmarco commented 4 years ago

Why not borrow code from https://github.com/othree/eregex.vim/blob/master/plugin/eregex.vim? It has the E2v function to turn an extended Perl-Style regex to a Vim regex. See here

:echo E2v('^(foo|bar|2\d.*?0)$')
^\(foo\|bar\|2\d.\{-}0\)$