For many, many years now when I want to browse a man page about something I’ll type man X into my terminal, substituting X for whatever it is I wish to learn about. Depending on the manual, it’s short and therefore easy to find what I want, or I am deep in the woods because I’m trying to find a specific flag that appears many times in a very long document. Woe is me if the flag switch is a bare letter, like x.

And let’s say it is x. Now I am searching with /x followed by n n n n n n n n N n n n n n. Obviously I’m not finding the information I want, the search is literal (not fuzzy, nor “whole word”), and even if I find something the manual pager might overshoot me because finding text will move the found line to the top of the terminal, and maybe the information I really want comes one or two lines above.

So… there HAS to be a better way, right? There has to be a modern, fast, easily greppable version to go through a man page. Does it exist?

P.S. I am not talking about summaries like tldr because I typically don’t need summaries but actual technical descriptions.

  • @[email protected]
    link
    fedilink
    40
    edit-2
    2 months ago

    Kind of off topic, but you know what would be cool? If you had an ‘man explain’ command that would define all the flags/args in a command, like:

    man explain rsync --append-verify --progress -avz -e "ssh -p 2222" root@$dip:/sdcard/DCIM/Camera newphonepix

    Would give you:

    rsync - a fast, versatile, remote (and local) file-copying tool
          --append-verify          --append w/old data in file checksum
          --progress               show progress during transfer
          --archive, -a            archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
          --verbose, -v            increase verbosity
          --compress, -z           compress file data during the transfer
          --rsh=COMMAND, -e        specify the remote shell to use 
    

    etc.

    • @[email protected]
      link
      fedilink
      72 months ago

      Here’s what I get in fish when I start writing a rsync command and hit tab to ask for completions:

      ❱ rsync --append-verify --progress -avz -
      -0  --from0                               (All *from/filter files are delimited by 0s)  --delete                   (Delete files that don’t exist on sender)
      -4  --ipv4                                                               (Prefer IPv4)  --delete-after         (Receiver deletes after transfer, not before)
      -6  --ipv6                                                               (Prefer IPv6)  --delete-before         (Receiver deletes before transfer (default))
      -8  --8-bit-output                          (Leave high-bit chars unescaped in output)  --delete-delay                 (Find deletions during, delete after)
      [more lines omitted]
      
    • @[email protected]
      link
      fedilink
      42 months ago

      There is a Plugin for Zsh (ohmyzsh) that gives you that right in the shell. I use it all the time and rely on it. Don’t have the name on my mind though, sorry.

    • TeddyKila [comrade/them]
      link
      fedilink
      English
      22 months ago

      Fish does this but is intentionally POSIX noncompliant so you’d wanr to keep the old shell installed if you run other people’s script.

  • @traches
    link
    English
    122 months ago

    I’d also like some guidance on this problem (other than “use emacs”), but searching for “ -x” will have a lower false positive rate

  • kbal
    link
    fedilink
    11
    edit-2
    2 months ago

    I am searching with /x

    On most systems these days you can use regular expressions there. If /-x isn’t good enough try /-x[ ,] or whatever.

  • @[email protected]
    link
    fedilink
    102 months ago

    I like tldr. It doesnt give incredibly in depth explanations, but it does show the basics of using most commands.

  • @[email protected]
    link
    fedilink
    102 months ago

    Honestly, I usually just “man command” in google.

    I know it’s wrong but my browser is tiled next to my terminal and it’s easy to look up stuff.

    • @[email protected]
      link
      fedilink
      12 months ago

      I did this before being in emacs made it so convenient to avoid, but got bit randomly by different versions or gnu vs BSD.

  • @[email protected]
    link
    fedilink
    92 months ago

    As someone with 0 knowledge of Linux (and very little of programming/command lines in general), this thread reads funny AF.

    • @[email protected]
      link
      fedilink
      22 months ago

      We are deep in the technical weeds here. 95% of Linux usage really doesn’t require such humour unfortunately.

  • @[email protected]
    link
    fedilink
    English
    62 months ago

    As an emacs user, I use M-x man. All my standard keybindings make finding what I need very easy.

    Of course, it’s not so fast if you aren’t already in emacs.

    • @[email protected]
      link
      fedilink
      English
      12 months ago

      +1, displaying in a Emacs buffer solves any issues I could have. If you’re already ‘in’ Emacs, this will be more frictionless than shell scripts around man

  • @[email protected]
    link
    fedilink
    52 months ago
           man -k printf
               Search  the short descriptions and manual page names for the keyword
               printf as regular expression.  Print out any matches.  Equivalent to
               apropos printf.
    
  • @[email protected]
    link
    fedilink
    English
    4
    edit-2
    2 months ago

    You can set on what line on the screen less (the pager program man uses by default) puts search results with the -jn/--jump-target=n option. For example, using .5 as a value for n makes less focus the line with the search result on the center of the screen. This should help with your overshoot issue.

    Either set the option within less with the - command followed by j.5↵ for the current running instance of less, or set and export the LESS environment variable inside your ~/.bashrc to have less always behave that way.

  • wuphysics87
    link
    fedilink
    32 months ago

    You can search via regex. For instance you know a section heading or flag is the first thing on a line preceded with spaces. I also find it earier to read with extensions for colors.

  • @[email protected]
    link
    fedilink
    3
    edit-2
    2 months ago

    the / and ? commands in the pagers more and most less implementations should support regular expressions (usually BREs in my experience); which is the same thing grep uses. Consider reading your friendly neighborhood regex formatting manpage, if you are confused. As for easily scrolling, ^G to terminate your search followed by b (or your favorite vi or emacs scrolling bind) to scroll back should be sufficient.

    Also, man some-manpage | grep expression works, if you didn’t know.