Search code examples
searchvimvimgrep

Is it possible to use vimgrep for a visual selection of the current file?


I would like to search with vimgrep only within a visual selection of the current file and not the whole file. Is that possible and how? I couldn't find something for this case with Google or in vim help.

The reason why I want this is because I need the result in the quicklist (copen) and :g/FOO which is showing the matching lines at the bottom is not doing this job.


Solution

  • Yes, you can, as Vim has special regular expression atoms for mark positions, and the start and end of the visual selection is marked by '< and '>. As there are atoms for on / before / after a mark, we need to combine those to cover the entire range of selected lines:

    On the selection start | after the selection start and before the selection end | on the selection end.

    To limit the search to the current file, the special % keyword is used.

    :vimgrep/\%(\%'<\|\%>'<\%<'>\|\%'>\)FOO/ %