【问题标题】:How can I read documentation about built in zsh commands?如何阅读有关内置 zsh 命令的文档?
【发布时间】:2011-05-23 06:24:16
【问题描述】:

当我执行man bindkey 之类的操作时,我感到很沮丧:

BUILTIN(1) BSD 通用命令手册 BUILTIN(1) 姓名 内置, !, %, ., :, @, {, }, 别名, alloc, bg, bind, bindkey, break, breakw, builtins, case, cd, chdir, command, 完成,继续,默认,dirs,do,done,echo,echotc,elif,else,end,endif,endsw,esac,eval,exec,exit, 导出,假,fc,fg,filetest,fi,for,foreach,getopts,glob,goto,哈希,hashstat,历史,hup,if,jobid, 作业,杀死,限制,本地,日志,登录,注销,ls-F,nice,nohup,通知,onintr,popd,printenv,pushd,pwd,读取, 只读,重新散列,重复,返回,sched,设置,setenv,settc,setty,setvar,移位,源,停止,暂停,开关, telltc,测试,然后,时间,时间,陷阱,真,类型,ulimit,umask,unalias,不完整,unhash,unlimit,unset, unsetenv, until, wait, where, which, while -- shell 内置命令 概要 内置 [-options] [args ...] 描述 Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在

有没有一种简单的方法可以访问此类命令的文档?

【问题讨论】:

  • 我将问题改为“zsh”而不是“shell”,因为 jcomeau_ictx 对 bash 的回答很好,但不适用于 zsh……
  • 这应该被移到 unix.se。
  • bash 的等效项是 help command,而不是 man command

标签: linux bash zsh built-in


【解决方案1】:

获得更有用的帮助实用程序的关键信息实际上包含在 Zsh 中,只需找到关键且难以发现的手册页:man zshcontrib (here on the web),它描述了 run-help小部件:

默认情况下,run-helpman 命令的别名,因此当命令字是 shell 内置或用户定义的函数时,这通常会失败。通过重新定义run-help 别名,可以改进shell 提供的在线帮助。

它进一步解释了如何用内置改进来替换它。

设置完成后,调用 run-help 获取内置函数名称、完成函数等现在将尝试显示提取的文档,或显示包含手册页的右侧等。例如 run-help bindkey 输出:

bindkey
   See the section `Zle Builtins' in zshzle(1).

这可能会更好。举个更好的例子,run-help history 显示了 fc 的 Zsh 手册页部分,这是 history 的基础命令。

还需要注意:ESC-h 将调用 run-help 以获取当前输入行上的命令。

我认为此设置不是默认设置,因为提取粒度帮助数据并将HELPDIR 设置为指向它可能是操作系统发行版的打包决定。还有一个用户选择:autoload run-help 实用程序很有用,根本不需要设置 HELPDIR。它似乎很擅长将您带到正确的手册页,即使它无法跳转到某个项目的确切部分。有些人可能更喜欢这样,而不是遇到像上面的 bindkey 示例这样浪费时间的情况。 (为什么他们默认为alias run-help=man,我无法理解)。

对于 Zsh 5.0.3 或更新版本

helpfiles 提取可能包含在 Zsh 发行版中。如果您愿意,只需在您的系统上找到它们以设置 HELPDIR — 可能的候选人在 /usr/share/zsh/usr/local/share/zsh,查找 help 子目录。

对于 5.0.3 之前的 Zsh 版本

您可能需要自己按照man zshcontrib 中详述的过程来生成帮助文件。需要这样做有点烦人,但否则快速且无痛。

使用zsh --version 查找您安装的版本,并获取相应的源压缩包from the sourceforge archive。然后按照手册页所示运行helpfiles 脚本,并在您的~/.zshrc 中将目标设置为HELPDIR

【讨论】:

  • 甜蜜!有该 howto 中描述的 zsh 发行版的链接吗?
  • 不确定你的意思——它指的是zsh-4.3.12/Util/helpfiles 脚本?只需使用zsh --version 找到您安装的zsh 版本,然后获取相应的源代码压缩包from the sourceforge archive。完成这些步骤后,您可以根据需要删除下载和提取的源。如果这不是您要问的,请告诉我!
  • 好消息是最新的快照版本增加了配置过程中帮助文件的生成。可能它将在 5.0.3 中可用。见here
  • 对于那些使用 vi 模式的人,ESC-h 无法按上述方式工作。您可以输入ESC 进入命令模式,然后输入:run-help。或者,您可以将 alias help=run-help 添加到您的 .zshrc(或您保留别名的任何位置)。
  • @JohnBachir 在相同的环境/版本中确认。不确定在这里做什么,因为“对于 ZSH 版本 5.0.3 或更高版本”部分是不是我自己的编辑,因此可能应该是一个新答案。一旦我可以尝试确认在另一个环境中的行为,我想重新编辑以更正该行为,但不想因lendenmc的回答而受到赞扬。如果我无法验证,我想最坏的情况我会删除该部分。
【解决方案2】:

尝试以下任何一种:

man zshbuiltins

man zshall

zsh 的手册页按主题划分,man zsh 主要是目录和介绍,而man zshall 就是一切(我的系统上的 24628 行,而 man bash 的 5242 行)。

至于bindkeyman zshbuiltins会转介你man zshzle

【讨论】:

  • 最近有变化吗?我的zsh (5.0.2) 没有任何关联的man 页面(自动完成仅建议zsh5,尝试man zsh5 会导致:man: warning: /usr/share/man/man1/zsh5.1.gz is a dangling symlink)。我必须安装Ubuntu软件包zsh-doc才能做到info zsh,然后转到Builtins部分最终获得有关echo的信息。
  • @anol: Apparently it's a bug 在 13.10 和 14.04 中,但它在 14.10 中恢复原状。您可以从源安装它们(链接中的信息)或在线查看它们(例如here)。
【解决方案3】:

您可以将这些行添加到您的 .zshrc 个人资料中:

unalias run-help 2>/dev/null
autoload run-help
HELPDIR=/path/to/zsh_help_directory
alias help=run-help

/path/to/zsh_help_directory 必须替换为您的 zsh 帮助文件夹。如果你在 OS X 上通过 Homebrew 安装了 zsh,这个文件夹是 /usr/local/share/zsh/help

这将为 zsh 启用类似 bash 的帮助。

需要说明的是,如果你的zsh登录shell帮助文件的默认安装路径存在并且包含了需要的文件,第三行HELPDIR=/path/to/zsh_help_directory就不需要了。

获取您的 .zshrc ($ source .zshrc) 并检查是否一切正常(例如,选择您想要的任何 zsh 内置,这里我选择了 autoload):

$ help autoload

请注意,2>/dev/null 部分是必需的,因为没有它,每次您获取 .zshrc 文件时都会出现 std 错误“unalias: no such hash table element: run-help”,而run-help 已经取消了别名。

【讨论】:

  • 这很好用。 zsh “期望”我们访问这些帮助文档的方式是什么?为什么我们必须取消别名 run-help,再次自动加载,然后告诉它文档在哪里?
  • 我也将投票删除alias help=run-help 位,以做出更简单的答案。
  • 对于使用默认os x zsh的任何人,帮助路径为/usr/share/zsh/5.0.5/help
  • 另外,使用 OS X 上的默认系统安装,似乎根本没有必要明确设置 HELPDIR。没有这一步对我有用。
  • @JohnBachir,run-help 并不是真正的“重新自动加载”(正如您所说的“再次自动加载”)。正如@ches 的回答中所解释的,run-help 最初是 only 的 man 命令的别名。所以一旦这个别名被删除,那么你需要第一次自动加载run-help function 以便能够使用它....如果这有意义的话。
【解决方案4】:

其他答案太长了...

通过将以下内容添加到您的.zshrc 来设置run-help 函数:

unalias run-help
autoload run-help

提示:使用. ~/.zshrc 重新加载配置。

现在您在运行run-help bindkey 时应该会看到一个手动输入。如果不起作用,您需要查看Accessing On-Line Help (man zshcontrib) 的更多说明。

在某些情况下,run-help 找不到手动条目,您必须搜索 man zshall

【讨论】:

  • Arghhhhh,为什么我不能让run-help historyhistory 命令工作?就像 OP 说的那样令人沮丧。
  • @SridharSarnobat 当我运行run-help history 时,我看到了fc 的文档。滚动到底部,它会显示 history: Same as fc -l.
  • 不,解释很有价值。
  • FWIW,在 macOS 10.15 及更高版本上运行帮助似乎开箱即用……¯_(ツ)_/¯
【解决方案5】:

我从 bash 转到 zsh,但错过了内置的“帮助”。所以我写了一个别名来称呼它。然后我想出了更好的办法。虽然我有时确实需要按一次或多次“n”才能到达手册中我需要的行。

help(){
    #This function used to call the "bash" builtin.
    #bash -c "help $@"

    #Better way: look it up in the man pages. I often look up "test" which doesn't give a usefull result,
    #so I added that as a special case.
    if [[ $1 == "test" ]]; then
        man --pager="less -p'^CONDITIONAL EXPRESSIONS$'" zshall
    else
        man --pager="less -p'^ *$@ '" zshall
    fi
}

【讨论】:

    【解决方案6】:

    使用 Bash,“帮助”有效:

    jcomeau@intrepid:~/etc/apache2$ 帮助直到 直到:直到命令;执行命令;完毕 只要测试不成功,就执行命令。 展开并执行 COMMANDS 只要最后一个命令在 '直到' COMMANDS 的退出状态不为零。 退出状态: 返回最后执行的命令的状态。

    【讨论】:

    • 但由于我的系统没有'bindkey',不确定这个答案是否有帮助。
    • downvoters:请注意,原始帖子没有提到 zsh,只是“shell”。
    【解决方案7】:

    每次我需要获取一些 Zsh 信息时,我终于厌倦了通过手册页和在线搜索进行搜索。我浏览了 Zsh 的所有手册页,并整理了一个很好的“帮助”功能,该功能相当广泛。

    要使用它,我会在您的 fpath 某处创建一个名为“帮助”的文件,并将 autoload -Uz help 添加到您的 zshrc。

    # better help function than zsh's crappy run-help
    local ZSHPAGE=zshall LESSQUERY
    LESS="-RM~gIsw"
    LESS_TERMCAP_mb=$'\E[01;31m'
    LESS_TERMCAP_md=$'\E[01;31m'
    LESS_TERMCAP_me=$'\E[0m'
    LESS_TERMCAP_se=$'\E[0m'
    LESS_TERMCAP_so=$'\E[01;44;33m'
    LESS_TERMCAP_ue=$'\E[0m'
    LESS_TERMCAP_us=$'\E[01;32m'
    
    case "$@" in
        ""|--help|-h)
            local cmds='
    RESERVED WORDS
    do done esac then elif else fi for case if while function  repeat  time until  select  coproc nocorrect foreach end ! [[ { } declare export float integer local readonly typeset
    
    BUILTIN COMMANDS
    - . : [ [[ alias autoload bg bindkey break builtin bye cap cd chdir clone command comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues continue declare dirs disable disown echo echotc echoti emulate enable eval exec exit export false fc fg float functions getcap getln getopts hash history integer jobs kill lets limit local log logout noglob popd print printf pushd pushln pwd r read readonly rehash return sched set setcap setopt shift source stat suspend test times trap true ttyctl type typeset ulimit umask unalias unfunction unhash unlimit unset unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp
            '
            if whence -p fold >/dev/null; then
                fold -sw$COLUMNS <<< $cmds
            else
                print -- $cmds
            fi
            return;;
        '-- '*)
            shift
            LESSQUERY="$@";;
        loop*|while|do|done|if|then|elif|else|fi|until)
            LESSQUERY='^COMPLEX COMMANDS$'
            ZSHPAGE=zshmisc;;
        for)
            LESSQUERY='^       for name \.\.\. '
            ZSHPAGE=zshmisc;;
        foreach|end)
            LESSQUERY='^       foreach name \.\.\.'
            ZSHPAGE=zshmisc;;
        case|esac)
            LESSQUERY='^       case word'
            ZSHPAGE=zshmisc;;
        coproc)
            LESSQUERY='coproc'
            ZSHPAGE=zshmisc;;
        repeat)
            LESSQUERY='^       repeat word do'
            ZSHPAGE=zshmisc;;
        select)
            LESSQUERY='^       select name \[ in word'
            ZSHPAGE=zshmisc;;
        time)
            LESSQUERY='^       time \[ pipeline \]'
            ZSHPAGE=zshmisc;;
        list|'('*|'{'*|subshell)
            LESSQUERY='^       time \[ pipeline \]'
            ZSHPAGE=zshmisc;;
        '!'|not)
            LESSQUERY='^       \! exp  true if exp is false\.'
            ZSHPAGE=zshmisc;;
        .)
            LESSQUERY='^       \. file \[ arg \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        :)
            LESSQUERY='^       : \['
            ZSHPAGE=zshbuiltins;;
        alias)
            LESSQUERY='^       alias \['
            ZSHPAGE=zshbuiltins;;
        autoload)
            LESSQUERY='^       autoload \['
            ZSHPAGE=zshbuiltins;;
        *autoload*)
            LESSQUERY='^AUTOLOADING FUNCTIONS$'
            ZSHPAGE=zshmisc;;
        bg)
            LESSQUERY='^       bg \['
            ZSHPAGE=zshbuiltins;;
        bindkey)
            LESSQUERY='^ZLE BUILTINS$'
            ZSHPAGE=zshzle;;
        break)
            LESSQUERY='^       break \[ n \]'
            ZSHPAGE=zshbuiltins;;
        -|exec|command|noglob|nocorrect|builtin|precommand*)
            LESSQUERY='^PRECOMMAND MODIFIERS$'
            ZSHPAGE=zshmisc;;
        bye)
            LESSQUERY='^       bye    Same as exit\.'
            ZSHPAGE=zshbuiltins;;
        cap)
            LESSQUERY='^The zsh/cap Module$'
            ZSHPAGE=zshmodules;;
        cd)
            LESSQUERY='^       cd \[ -qsLP \] \[ arg \]'
            ZSHPAGE=zshbuiltins;;
        chdir)
            LESSQUERY='^       chdir  Same as cd\.'
            ZSHPAGE=zshbuiltins;;
        clone)
            LESSQUERY='^The zsh/clone Module'
            ZSHPAGE=zshmodules;;
        compargu*)
            LESSQUERY='^       comparguments$'
            ZSHPAGE=zshmodules;;
        compcall)
            LESSQUERY='^       compcall \[ -TD'
            ZSHPAGE=zshcompwid;;
        compctl)
            LESSQUERY='^       compctl \[ -CDT'
            ZSHPAGE=zshcompctl;;
        compdes*)
            LESSQUERY='^       compdescribe$'
            ZSHPAGE=zshmodules;;
        compfiles)
            LESSQUERY='^       compfiles$'
            ZSHPAGE=zshmodules;;
        compgroups)
            LESSQUERY='^       compgroups$'
            ZSHPAGE=zshmodules;;
        compquote)
            LESSQUERY='^       compquote$'
            ZSHPAGE=zshmodules;;
        comptags)
            LESSQUERY='^       comptags$'
            ZSHPAGE=zshmodules;;
        comptry)
            LESSQUERY='^       comptry$'
            ZSHPAGE=zshmodules;;
        compvalues)
            LESSQUERY='^       compvalues$'
            ZSHPAGE=zshmodules;;
        continue)
            LESSQUERY='^       continue \[ n \]'
            ZSHPAGE=zshbuiltins;;
        dirs)
            LESSQUERY='^       dirs \[ -c \]'
            ZSHPAGE=zshbuiltins;;
        disable)
            LESSQUERY='^       disable \[ -afmprs \]'
            ZSHPAGE=zshbuiltins;;
        disown)
            LESSQUERY='^       disown \[ job \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        echo)
            LESSQUERY='^       echo \[ -neE \]'
            ZSHPAGE=zshbuiltins;;
        echotc)
            LESSQUERY='^The zsh/termcap Module$'
            ZSHPAGE=zshmodules;;
        echoti)
            LESSQUERY='^The zsh/terminfo Module$'
            ZSHPAGE=zshmodules;;
        emulate)
            LESSQUERY='^       emulate \[ -LR \]'
            ZSHPAGE=zshbuiltins;;
        enable)
            LESSQUERY='^       enable \[ -afmprs \]'
            ZSHPAGE=zshbuiltins;;
        eval)
            LESSQUERY='^       eval \[ arg \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        exit)
            LESSQUERY='^       exit \[ n \]'
            ZSHPAGE=zshbuiltins;;
        export)
            LESSQUERY='^       export \[ name'
            ZSHPAGE=zshbuiltins;;
        fc)
            LESSQUERY='^       fc \[ -e ename \] \[ -LI \]'
            ZSHPAGE=zshbuiltins;;
        fg)
            LESSQUERY='^       fg \[ job \.\.\. \]S'
            ZSHPAGE=zshbuiltins;;
        functions)
            LESSQUERY='^       functions \[ \{\+\|-\}UkmtTuz'
            ZSHPAGE=zshbuiltins;;
        getcap)
            LESSQUERY='^The zsh/cap Module$'
            ZSHPAGE=zshmodules;;
        getln)
            LESSQUERY='^       getln \[ -AclneE \]'
            ZSHPAGE=zshbuiltins;;
        getopts)
            LESSQUERY='^       getopts optstring name'
            ZSHPAGE=zshbuiltins;;
        hash)
            LESSQUERY='^       hash \[ -Ldfmrv \]'
            ZSHPAGE=zshbuiltins;;
        history)
            LESSQUERY='^HISTORY EXPANSION$';;
        integer)
            LESSQUERY='^       integer \[ \{\+\|-\}Hghlprtux'
            ZSHPAGE=zshbuiltins;;
        jobs)
            LESSQUERY='^       jobs \[ -dlprs \]'
            ZSHPAGE=zshbuiltins;;
        kill)
            LESSQUERY='^       kill \[ -s signal_name'
            ZSHPAGE=zshbuiltins;;
        limit)
            LESSQUERY='^       limit \[ -hs \]'
            ZSHPAGE=zshbuiltins;;
        local)
            LESSQUERY='^       local \[ \{\+\|-\}AHUahlprtux '
            ZSHPAGE=zshbuiltins;;
        log)
            LESSQUERY='^       log    List all'
            ZSHPAGE=zshbuiltins;;
        logout)
            LESSQUERY='^       logout \[ n \]'
            ZSHPAGE=zshbuiltins;;
        popd)
            LESSQUERY='^       popd \[ -q \]'
            ZSHPAGE=zshbuiltins;;
        print)
            LESSQUERY='^       print \[ -abcDilmnNoOpPrsSz \]'
            ZSHPAGE=zshbuiltins;;
        printf)
            LESSQUERY='^       printf format \[ arg \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        pushd)
            LESSQUERY='^       pushd \[ -qsLP \]'
            ZSHPAGE=zshbuiltins;;
        pushln)
            LESSQUERY='^       pushln \[ arg \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        pwd)
            LESSQUERY='^       pwd \[ -rLP \]'
            ZSHPAGE=zshbuiltins;;
        r)
            LESSQUERY='^       r      Same as fc -e -\.'
            ZSHPAGE=zshbuiltins;;
        read)
            LESSQUERY='^       read \[ -rszpqAclneE \]'
            ZSHPAGE=zshbuiltins;;
        readonly)
            LESSQUERY='^       readonly$'
            ZSHPAGE=zshbuiltins;;
        rehash)
            LESSQUERY='^       rehash Same as hash -r\.'
            ZSHPAGE=zshbuiltins;;
        return)
            LESSQUERY='^       return \[ n \]'
            ZSHPAGE=zshbuiltins;;
        sched|'sched module')
            LESSQUERY='^THE ZSH/SCHED MODULE$'
            ZSHPAGE=zshmodules;;
        set)
            LESSQUERY='^       set \[ \{\+\|-\}options'
            ZSHPAGE=zshbuiltins;;
        setcap)
            LESSQUERY='^The zsh/cap Module$'
            ZSHPAGE=zshmodules;;
        setopt)
            LESSQUERY='^       setopt \[ \{\+\|-\}options'
            ZSHPAGE=zshbuiltins;;
        shift)
            LESSQUERY='^       shift \[ -p \]'
            ZSHPAGE=zshbuiltins;;
        source)
            LESSQUERY='^       source file \[ arg'
            ZSHPAGE=zshbuiltins;;
        stat|zstat|'stat module')
            LESSQUERY='^The zsh/stat Module$'
            ZSHPAGE=zshmodules;;
        times)
            LESSQUERY='^       times  Print'
            ZSHPAGE=zshbuiltins;;
        test|'[['*|'['*)
            LESSQUERY='^CONDITIONAL EXPRESSIONS$'
            ZSHPAGE=zshmisc;;
        trap)
            LESSQUERY='^       trap \[ arg \] \[ sig \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        true)
            LESSQUERY='^       true \[ arg \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        ttyctl)
            LESSQUERY='^       ttyctl \[ -fu \]'
            ZSHPAGE=zshbuiltins;;
        type)
            LESSQUERY='^       type \[ -wfpamsS \]'
            ZSHPAGE=zshbuiltins;;
        typeset|declare)
            LESSQUERY='^       typeset \[ \{\+\|-\}AHUaghlmprtux \]'
            ZSHPAGE=zshbuiltins;;
        ulimit)
            LESSQUERY='^       ulimit \[ -HSa \] \['
            ZSHPAGE=zshbuiltins;;
        umask)
            LESSQUERY='^       umask \[ -S \] \[ mask \]'
            ZSHPAGE=zshbuiltins;;
        unalias)
            LESSQUERY='^       unalias \[ -ams \]'
            ZSHPAGE=zshbuiltins;;
        unfunction)
            LESSQUERY='^       unfunction$'
            ZSHPAGE=zshbuiltins;;
        unhash)
            LESSQUERY='^       unhash \[ -adfms \]'
            ZSHPAGE=zshbuiltins;;
        unset)
            LESSQUERY='^       unset \[ -fmv \]'
            ZSHPAGE=zshbuiltins;;
        unsetopt)
            LESSQUERY='^       unsetopt \[ \{\+\|-\}options'
            ZSHPAGE=zshbuiltins;;
        vared)
            LESSQUERY='^       vared \[ -Aache \]'
            ZSHPAGE=zshzle;;
        wait)
            LESSQUERY='^       wait \[ job \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        whence)
            LESSQUERY='^       whence \[ -vcwfpamsS \]'
            ZSHPAGE=zshbuiltins;;
        where)
            LESSQUERY='^       where \[ -wpmsS \]'
            ZSHPAGE=zshbuiltins;;
        which)
            LESSQUERY='^       which \[ -wpamsS \]'
            ZSHPAGE=zshbuiltins;;
        zcompile)
            LESSQUERY='^       zcompile \[ -U \] \[ -z \|'
            ZSHPAGE=zshbuiltins;;
        zformat)
            LESSQUERY='^       zformat -f param format'
            ZSHPAGE=zshmodules;;
        zftp|'ftp module')
            LESSQUERY='^The zsh/zftp Module$'
            ZSHPAGE=zshmodules;;
        zle)
            LESSQUERY='^       zle -l \[ -L \| -a \] \[ string \.\.\. \]'
            ZSHPAGE=zshzle;;
        widget)
            LESSQUERY='^              widget \[ -n num \] \[ -Nw \]'
            ZSHPAGE=zshzle;;
        zmodload)
            LESSQUERY='^       zmodload \[ -dL \] \[ \.\.\. \]'
            ZSHPAGE=zshbuiltins;;
        zparseopts)
            LESSQUERY='^       zparseopts \[ -DKME \]'
            ZSHPAGE=zshmodules;;
        zprof|'zprof module')
            LESSQUERY='^THE ZSH/ZPROF MODULE$'
            ZSHPAGE=zshmodules;;
        zpty|'zpty module')
            LESSQUERY='^THE ZSH/ZPTY MODULE$'
            ZSHPAGE=zshmodules;;
        zregexparse)
            LESSQUERY='^       zregexparse$'
            ZSHPAGE=zshmodules;;
        zsocket|(net|socket)' module')
            LESSQUERY='^THE ZSH/NET/SOCKET MODULE$'
            ZSHPAGE=zshmodules;;
        zstyle|'zutil module')
            LESSQUERY='^The zsh/zutil Module$'
            ZSHPAGE=zshmodules;;
        ztcp|'tcp module')
            LESSQUERY='^THE ZSH/NET/TCP MODULE$'
            ZSHPAGE=zshmodules;;
        attr*mod*|zgetattr|zsetattr|zdelattr|zlistattr)
            LESSQUERY='^THE ZSH/ATTR MODULE$'
            ZSHPAGE=zshmodules;;
        complist*mod*)
            LESSQUERY='^THE ZSH/COMPLIST MODULE'
            ZSHPAGE=zshmodules;;
        computil*mod*)
            LESSQUERY='^THE ZSH/COMPUTIL MODULE'
            ZSHPAGE=zshmodules;;
        curses*|zcurses)
            LESSQUERY='^THE ZSH/CURSES MODULE'
            ZSHPAGE=zshmodules;;
        datetime*|strftime)
            LESSQUERY='^THE ZSH/DATETIME MODULE'
            ZSHPAGE=zshmodules;;
        (db|gdbm)*|ztie|zuntie)
            LESSQUERY='^THE ZSH/DB/GDBM MODULE'
            ZSHPAGE=zshmodules;;
        delto*|delete-to-char|zap-to-char)
            LESSQUERY='^THE ZSH/DELTOCHAR MODULE'
            ZSHPAGE=zshmodules;;
        example*)
            LESSQUERY='^THE ZSH/EXAMPLE MODULE'
            ZSHPAGE=zshmodules;;
        files*mod*|chgrp|chown|ln|mkdir|mv|rm|rmdir|sync)
            LESSQUERY='^THE ZSH/FILES MODULE'
            ZSHPAGE=zshmodules;;
        langinfo*)
            LESSQUERY='^THE ZSH/LANGINFO MODULE'
            ZSHPAGE=zshmodules;;
        mapfile*)
            LESSQUERY='^THE ZSH/MAPFILE MODULE'
            ZSHPAGE=zshmodules;;
        mathfunc*mod*)
            LESSQUERY='^THE ZSH/MATHFUNC MODULE'
            ZSHPAGE=zshmodules;;
        param*mod*)
            LESSQUERY='^THE ZSH/PARAMETER MODULE'
            ZSHPAGE=zshmodules;;
        pcre*)
            LESSQUERY='^THE ZSH/PCRE MODULE'
            ZSHPAGE=zshmodules;;
        regex*mod*)
            LESSQUERY='^THE ZSH/REGEX MODULE'
            ZSHPAGE=zshmodules;;
        system*mod*|syserror|sysopen|sysread|sysseek|syswrite|zsystem*)
            LESSQUERY='^THE ZSH/SYSTEM MODULE'
            ZSHPAGE=zshmodules;;
        zselect*)
            LESSQUERY='^THE ZSH/ZSELECT MODULE'
            ZSHPAGE=zshmodules;;
        start*flag*|invok*|initial*)
            LESSQUERY='^INVOCATION$'
            ZSHPAGE=zsh;;
        (start|shut)*file*|*zshenv|*zshrc|*zprofile|*zlogin|*zlogout|*zdotdir*|*ZDOTDIR*)
            LESSQUERY='^STARTUP/SHUTDOWN FILES$'
            ZSHPAGE=zsh;;
        subscript*)
            LESSQUERY='^   Subscript Flags'
            ZSHPAGE=zshparam;;
        simple*|pipe*)
            LESSQUERY='^SIMPLE COMMANDS & PIPELINES'
            ZSHPAGE=zshmisc;;
        function*)
            LESSQUERY='^       function word'
            ZSHPAGE=zshmisc;;
        alt*)
            LESSQUERY='^ALTERNATE FORMS$'
            ZSHPAGE=zshmisc;;
        reserv*)
            LESSQUERY='^RESERVED WORDS$'
            ZSHPAGE=zshmisc;;
        error*)
            LESSQUERY='^ERRORS$'
            ZSHPAGE=zshmisc;;
        alias*)
            LESSQUERY='^ALIASING$'
            ZSHPAGE=zshmisc;;
        quot*)
            LESSQUERY='^QUOTING$'
            ZSHPAGE=zshmisc;;
        redirect*|*'>'*|*'<'*|*'&>'*|*'2>'*|*'>>'*|*'<<'*)
            LESSQUERY='^REDIRECTION$'
            ZSHPAGE=zshmisc;;
        file*desc*)
            LESSQUERY='^OPENING FILE DESCRIPTORS USING PARAMETERS$'
            ZSHPAGE=zshmisc;;
        multios)
            LESSQUERY='^MULTIOS$'
            ZSHPAGE=zshmisc;;
        anon*func*)
            LESSQUERY='^ANONYMOUS FUNCTIONS$'
            ZSHPAGE=zshmisc;;
        hook*)
            LESSQUERY='^   Hook Functions$'
            ZSHPAGE=zshmisc;;
        trap*)
            LESSQUERY='^   Trap Functions$'
            ZSHPAGE=zshmisc;;
        job*)
            LESSQUERY='^JOBS$'
            ZSHPAGE=zshmisc;;
        math*|'(('*|'$(('|let*|arith*)
            LESSQUERY='^ARITHMETIC EVALUATION$'
            ZSHPAGE=zshmisc;;
        prompt|promptinit|prompt*theme*)
            LESSQUERY='^       prompt \[ -c \| -l \]'
            ZSHPAGE=zshcontrib;;
        PS1|prompt*|PROMPT*)
            LESSQUERY='^SIMPLE PROMPT ESCAPES$'
            ZSHPAGE=zshmisc;;
        history*)
            LESSQUERY='^HISTORY EXPANSION$'
            ZSHPAGE=zshexpn;;
        proc*sub*|*'<('*|*')>'*)
            LESSQUERY='^PROCESS SUBSTITUTION$'
            ZSHPAGE=zshexpn;;
        param*flag*)
            LESSQUERY='^   Parameter Expansion Flags$'
            ZSHPAGE=zshexpn;;
        param*rule*|nested*sub*)
            LESSQUERY='^   Rules$'
            ZSHPAGE=zshexpn;;
        param*ex*)
            LESSQUERY='^   Examples$'
            ZSHPAGE=zshexpn;;
        param*|'${')
            LESSQUERY='^PARAMETER EXPANSION$'
            ZSHPAGE=zshexpn;;
        brace*expan*)
            LESSQUERY='^BRACE EXPANSION$'
            ZSHPAGE=zshexpn;;
        filename*expan*)
            LESSQUERY='^FILENAME EXPANSION$'
            ZSHPAGE=zshexpn;;
        expan*|subst*)
            LESSQUERY='^       zshexpn - zsh expansion and substitution$'
            ZSHPAGE=zshexpn;;
        dyn*dir*)
            LESSQUERY='^   Dynamic named directories$'
            ZSHPAGE=zshexpn;;
        static*dir*)
            LESSQUERY='^   Static named directories$'
            ZSHPAGE=zshexpn;;
        approx*match*)
            LESSQUERY='^   Approximate Matching$'
            ZSHPAGE=zshexpn;;
        recurs*glob*)
            LESSQUERY='^   Recursive Globbing$'
            ZSHPAGE=zshexpn;;
        glob*qual*)
            LESSQUERY='^   Glob Qualifiers$'
            ZSHPAGE=zshexpn;;
        glob*flag*)
            LESSQUERY='^   Globbing Flags$'
            ZSHPAGE=zshexpn;;
        glob*)
            LESSQUERY='^   Glob Operators$'
            ZSHPAGE=zshexpn;;
        ksh*glob*)
            LESSQUERY='^   ksh-like Glob Operators'
            ZSHPAGE=zshexpn;;
        array*sub*)
            LESSQUERY='^   Array Subscripts$'
            ZSHPAGE=zshparam;;
        array*)
            LESSQUERY='^ARRAY PARAMETERS$'
            ZSHPAGE=zshparam;;
        positional*)
            LESSQUERY='^POSITIONAL PARAMETERS$'
            ZSHPAGE=zshparam;;
        shell*(param*|var*)|env*)
            LESSQUERY='^PARAMETERS SET BY THE SHELL$'
            ZSHPAGE=zshparam;;
        watchfmt*)
            LESSQUERY='^       WATCHFMT$'
            ZSHPAGE=zshparam;;
        set*|(shell|spec)*op*)
            LESSQUERY='^SPECIFYING OPTIONS$'
            ZSHPAGE=zshoptions;;
        single*opt*|short*flag*|single*letter*)
            LESSQUERY='^SINGLE LETTER OPTIONS$'
            ZSHPAGE=zshoptions;;
        (shell|zsh)*builtin*)
            LESSQUERY='^SHELL BUILTIN COMMANDS$'
            ZSHPAGE=zshbuiltins;;
        key*)
            LESSQUERY='^KEYMAPS$'
            ZSHPAGE=zshzle;;
        widget*)
            LESSQUERY='^USER-DEFINED WIDGETS$'
            ZSHPAGE=zshzle;;
        highlight*)
            LESSQUERY='^CHARACTER HIGHLIGHTING$'
            ZSHPAGE=zshzle;;
        comp*wid*)
            LESSQUERY='^       zshcompwid - zsh completion widgets'
            ZSHPAGE=zshcompwid;;
        complet*param*|*PREFIX*|*CURRENT*|*SUFFIX*)
            LESSQUERY='^COMPLETION SPECIAL PARAMETERS$'
            ZSHPAGE=zshcompwid;;
        compstate)
            LESSQUERY='^       compstate$'
            ZSHPAGE=zshcompwid;;
        compadd)
            LESSQUERY='^       compadd \[ -akqQfenUlo12C '
            ZSHPAGE=zshcompwid;;
        compset)
            LESSQUERY='^       compset -p number'
            ZSHPAGE=zshcompwid;;
        compcall)
            LESSQUERY='^       compcall \[ -TD'
            ZSHPAGE=zshcompwid;;
        *match*)
            LESSQUERY='^COMPLETION MATCHING CONTROL$'
            ZSHPAGE=zshcompwid;;
        *compsys*)
            LESSQUERY='^       zshcompsys - zsh completion system'
            ZSHPAGE=zshcompsys;;
        compdef*)
            LESSQUERY='^       compdef \[ -ane \]'
            ZSHPAGE=zshcompsys;;
        '#'compdef*)
            LESSQUERY='^       #compdef name'
            ZSHPAGE=zshcompsys;;
        *completer*)
            LESSQUERY='^       completer$'
            ZSHPAGE=zshcompsys;;
        *complet*|*'zstyle '*)
            LESSQUERY='^COMPLETION SYSTEM CONFIGURATION$'
            ZSHPAGE=zshcompsys;;
        utility*func*|_argu*|_descr*)
            LESSQUERY='^UTILITY FUNCTIONS$'
            ZSHPAGE=zshcompsys;;
        control*func*|_func*)
            LESSQUERY='^CONTROL FUNCTIONS$'
            ZSHPAGE=zshcompsys;;
        calendar*)
            LESSQUERY='^       calendar \[ -abdDsv'
            ZSHPAGE=zshcalsys;;
        calsys*)
            LESSQUERY='^       zshcalsys - zsh calendar system'
            ZSHPAGE=zshcalsys;;
        tcp*)
            LESSQUERY='^       zshtcpsys - zsh tcp system'
            ZSHPAGE=zshtcpsys;;
        ftp*|zftp*)
            LESSQUERY='^       zshzftpsys - zftp function front-end'
            ZSHPAGE=zshzftpsys;;
        contrib*)
            LESSQUERY='^       zshcontrib - user contributions to zsh'
            ZSHPAGE=zshcontrib;;
        special*func*)
            LESSQUERY='^SPECIAL FUNCTIONS'
            ZSHPAGE=zshmisc;;
        color*comp*)
            LESSQUERY='^   Colored completion listings'
            ZSHPAGE=zshmodules;;
        colors)
            LESSQUERY='^       colors This  function'
            ZSHPAGE=zshcontrib;;
        vcs*|version*control*)
            LESSQUERY='^GATHERING INFORMATION FROM VERSION CONTROL SYSTEMS$'
            ZSHPAGE=zshcontrib;;
        zle*)
            LESSQUERY='^ZLE FUNCTIONS$'
            ZSHPAGE=zshzle;;
        mime*)
            LESSQUERY='^MIME FUNCTIONS$'
            ZSHPAGE=zshcontrib;;
        zcalc*)
            LESSQUERY='^       zcalc \[ -ef'
            ZSHPAGE=zshcontrib;;
        zmathfuncdef)
            LESSQUERY='^       zmathfuncdef \['
            ZSHPAGE=zshcontrib;;
        other*func*)
            LESSQUERY='^OTHER FUNCTIONS'
            ZSHPAGE=zshcontrib;;
        zargs)
            LESSQUERY='       zargs \[ option'
            ZSHPAGE=zshcontrib;;
        tetris*)
            LESSQUERY='^       tetris Zsh'
            ZSHPAGE=zshcontrib;;
        zed)
            LESSQUERY='^       zed \[ -f'
            ZSHPAGE=zshcontrib;;
        zmv|zcp|zln|zkbd)
            LESSQUERY='^       zmv \[ -finq'
            ZSHPAGE=zshcontrib;;
        zstyle+)
            LESSQUERY='^       zstyle\+ context'
            ZSHPAGE=zshcontrib;;
        file*)
            LESSQUERY='^FILES$'
            ZSHPAGE=zsh;;
        except*|throw|catch|always)
            LESSQUERY='^EXCEPTION HANDLING$'
            ZSHPAGE=zshcontrib;;
        *)
            LESSQUERY="$@";;
    esac
    man --pager="less -p'$LESSQUERY'" "$ZSHPAGE"
    

    它使用less 作为分页器并启用less 对彩色手册页的termcap 支持。不带参数执行help--help-h 会列出保留字和内置命令。使用其中一个词键入 help 可以直接进入相应手册页中的条目。我浏览并缩小了特定手册页中的条目以优化速度/效率,而不是仅使用man ... zshall。这个帮助功能发现的不仅仅是保留字和内置命令。它将定位模块、模块命令、某些重要的完成命令(如 compadd、compset 等)的条目。

    通过键入help mathhelp complethelp globhelp arrayshelp envhelp except 可以显示许多关于算术、完成、通配、数组、环境变量、异常处理等内容的部分。有通配符和多个匹配项使帮助功能更加友好。这是一个相当简单的 case 语句,有超过 210 个匹配条件。如果没有匹配项,则默认为 zshall 搜索。如果匹配条件未显示您要查找的内容或似乎妨碍您,请在搜索字词后输入 help -- 以绕过所有匹配。

    我包含了很多 Zsh 手册页所涵盖的内容,但可以通过包含诸如下划线前缀的补全函数之类的内容来使其更智能或更完整。


    编辑:我为^[h (esc/alt + h) 做了一个 bindkey 函数。 run-help 默认绑定在那里,这将替换它。

    _helpprefix(){
        OLDBUFFER="$BUFFER"
        zle backward-kill-word
        BUFFER="help $CUTBUFFER"
        zle accept-line
        zle -U "$OLDBUFFER"
    }
    zle -N _helpprefix _helpprefix
    bindkey '^[h' _helpprefix
    

    它的作用是删掉最后一个输入的单词,用那个单词执行help,然后它推回原来的行。因此,您可以使用它在read 上运行帮助,如下所示:

    find /usr -print0 | while IFS= read
    

    查看read 的条目后,您仍然会在命令结束时正确。

    另外值得注意的是,如果您需要有关特定内置标志的帮助,您可以随时在命令后添加 - 并点击选项卡以查看每个标志的简短描述,例如read - + tab 打印出来:

    -A  -- first name is taken as an array
    -E  -- input read is echoed
    -d  -- specify delimiter to terminate input instead of newline
    -e  -- input read is echoed and not assigned
    -k  -- specify number of characters to read
    -q  -- read y or n character from terminal
    -r  -- raw mode
    -s  -- suppress terminal echoing
    -t  -- test if input is available before reading
    -u  -- specify file descriptor to read from
    -z  -- read entry from editor buffer stack
    

    【讨论】:

      【解决方案8】:

      虽然这在过去涉及更多,但截至 2017 年(Zsh v5.4), 在您的手指下获得一个非常快速和方便的帮助热键是 就像将以下内容放入您的 .zshrc 一样简单(或等效的 安装文件):

      unalias run-help
      autoload run-help
      bindkey "^[h" run-help
      

      现在您可以开始输入您尝试调用的完整命令 (在 opts/args 之后——例如,“hello”——被忽略):

      print hello«Alt-h»
      

      您会看到run-help 列表。

      print [ -abcDilmnNoOpPrsSz ] [ -u n ] [ -f format ] [ -C cols ]
        [ -v name ] [ -xX tabstop ] [ -R [ -en ]] [ arg ... ]
         With the `-f' option the arguments are printed as  described  by
         printf...
      

      大多数命令都有一个简短列表,摘自 zshbuiltins(1)。我看到我的系统上记录了 109 个命令 /usr/share/zsh/5.4.2/help/。喜欢 Zsh 的这个功能!

      请注意,并非所有内容都集成到 run-help 中,您将 有时需要拉起zshall(1) 才能找到您要查找的内容:

      % run-help zargs
      zargs is an autoload shell function
      No manual entry for zargs
      

      这个Alt-h(或者M-h,如果你喜欢)模式也很棒 基本上取代了你通常对man的任何呼叫,对于Zsh 命令或其他任何东西。而不是:

      % foo - # oh wait, how does this work
      % foo -^C
      % ^p^a  # recall, go to beginning of line
      % man foo
      

      现在只是:

      % foo -«Alt-h»
      

      【讨论】:

      • 我想知道:unalias run-help 总是必要的吗?也许不是,但它可能更智能、更安全,因为在我的系统上(至少,可能还有很多其他系统)run-help 别名为run-help=man。因此,在某些情况下,首先取消混叠是必不可少的。由于取消锯齿在这里没有什么坏处,我明白为什么包含它是一个好主意。
      【解决方案9】:

      你的 shell 的手册页可能会告诉你。

      如果在 shell 中阅读,请使用寻呼机的搜索功能(或浏览器的查找功能)。 less/search string 开始搜索,n 移动到下一个匹配项。

      【讨论】:

      • 在 zsh 手册页中没有提到 bindkeyalias(我随机挑选的一个)
      猜你喜欢
      • 2014-04-08
      • 1970-01-01
      • 2013-12-24
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多