Icicles lets you do this. With Icicles search you can navigate among the search hits (across the set of searched buffers or files).
You can cycle among the search hits, but you need not cycle. You can visit any hits you choose, in any order. You can dynamically filter the hits by typing a filter pattern, which you can change on the fly.
You can combine multiple such dynamic filter patterns, using several simple patterns in place of a more complex one. Pattern matching can use apropos (regexp) matching or any of several kinds of fuzzy matching. You can also filter by chipping away dynamic matches, subtracting them from the current, wider set of matches.
You can even search, not the search contexts you defined at the outset of searching, but their complement.
(Icicles search lets you define the contexts to search - for example, only function definitions or only comments. Other text is ignored (not searched). The simplest example is the lines of a buffer as search contexts. Line search contexts are what grep
, occur
, and icicle-occur
use.)
You can also replace individual search hits, or the parts of them that match your current input pattern, on demand, without exiting Icicles search. And you can change the replacement text anytime during search, on demand.
In the limited sense of such replacement you can thus not only visit the searched buffers but edit them, without ever exiting search.