The reason is that StagedRender.is_ready depends on last_render, which get's set to VIM::Buffer.count() in StagedRender::do_next. I do not (yet) know what exactly happens, but after the first call to search refresh last_render never get's less than 2*2*window.height. That means once you do search_refresh StagedRender never will be ready - is_ready returns false, so s:show_cursor_moved never will advance the StagedRender. I am trying to understand the code, but it's a hard time for me ;)