Some commands, for example :syn and :scriptnames show a "--more-- screen" which is confusing to navigate. Contrary to what man more says, pressing / doesn't seem to work to search for text. Instead pressing it shows -- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit at bottom, which is different from the behaviour in more (which also doesn't seem to work properly in my system, which i never noticed since i always used less). This is very awkward and confusing, how to navigate in these windows?

  • For completeness, note that this is vim's builtin pager which looks similar to the unix more utility but is in fact internal to vim. That is why its behaviour is discordant with what you might expect when reading man more. Apr 6 '21 at 22:27

To see the commands available from that prompt go to :h pager. Here's the bulk of the content:

Type                         effect
<CR> or <NL> or j or <Down>  one more line
d                            down a page (half a screen)
<Space> or f or <PageDown>   down a screen
G                            down all the way, until the hit-enter

<BS> or k or <Up>           one line back
u                           up a page (half a screen)
b or <PageUp>               back a screen
g                           back to the start

q, <Esc> or CTRL-C          stop the listing
:                           stop the listing and enter a
<C-Y>                       yank (copy) a modeless selection to
                            the clipboard ("* and "+ registers)
{menu-entry}                what the menu is defined to in
<LeftMouse>                 next page (*)

Any other key causes the meaning of the keys to be displayed.

Then there's the somewhat obscure g< command...

The |g<| command can be used to see the last page of previous command output.
This is especially useful if you accidentally typed <Space> at the hit-enter prompt.

I know I often accidentally exit out of the last page of output so g< is a nice little command to get back there without having to think much about it.

Ah, but you asked about searching. As you can see / is not available. Your best bet is probably to use the :filter command...

:filter /pattern/ :scriptnames

...for example. Unfortunately, :filter doesn't work with all commands. Your other example, :syn, to name one. At this point we're left with only ad hoc solutions. If you want to use / then it'll be quite crude...

:redir @x | silent :syn | redir END

That'll put the :syn command's output into register x. (:silent ensure the full output is dumped without pause/prompting.) Now go paste the register contents in an empty buffer and search it. Like I said, crude.


A more fully realized and robust take on the :redir approach can be found here: Redirect the output of a Vim or external command into a scratch buffer

Conveniently, it's encapsulated in a single user command named :Redir.

  • :filter /pattern/ :syn seems to have always same output as :syn. Help page on :filter says only some commands support filtering and :syn doesn't seem to be one of those.. Apr 7 '21 at 10:10
  • Ah, I think I tested :scriptnames and then mixed them up in my head. I'm pretty sure there's no straightforward way to do it for commands that don't work with :filter. I have a couple ad hoc methods that you can use which I'll post when I get a minute.
    – B Layer
    Apr 7 '21 at 10:41
  • 1
    Also :new | put =execute(…)
    – D. Ben Knoble
    Apr 7 '21 at 12:32
  • Yes, there are all kinds of ways to do it. All but the way that makes the most sense (i.e. search in pager.) :P
    – B Layer
    Apr 7 '21 at 14:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.