Как я могу прочитать документацию о встроенных командах zsh?

Это расстраивает, когда я делаю что-то вроде man bindkey и получаю:

BUILTIN(1)                BSD General Commands Manual               BUILTIN(1)

NAME
     builtin, !, %, ., :, @, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command,
     complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit,
     export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid,
     jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, pushd, pwd, read,
     readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch,
     telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset,
     unsetenv, until, wait, where, which, while -- shell built-in commands

SYNOPSIS
     builtin [-options] [args ...]

DESCRIPTION
     Shell builtin commands are commands that can be executed within the running shell's process.  Note that, in the

Есть ли простой способ получить доступ к документации для таких команд?


person John Bachir    schedule 10.12.2010    source источник
comment
Я изменил вопрос, чтобы сказать zsh вместо оболочки, поскольку ответ jcomeau_ictx для bash отлично работает, но не для zsh…   -  person John Bachir    schedule 10.12.2010
comment
Это, вероятно, следует перенести на unix.se.   -  person Warren Young    schedule 17.05.2012
comment
Эквивалентом для bash будет help command, а не man command.   -  person Flimm    schedule 13.02.2014


Ответы (9)


Другие ответы слишком длинные...

Настройте функцию run-help, добавив в .zshrc следующее:

unalias run-help
autoload run-help

Совет: перезагрузите конфигурацию с помощью . ~/.zshrc.

Теперь вы должны увидеть ручную запись при запуске run-help bindkey. Если это не работает, вам необходимо просмотреть дополнительные инструкции для Доступ к интерактивной справке (man zshcontrib).

В некоторых случаях run-help не найдет ручную запись, и вам придется искать через man zshall.

person cambunctious    schedule 03.07.2019
comment
Ааааа, почему я не могу заставить run-help history работать на команду history? Как сказал ОП, это расстраивает. - person Sridhar Sarnobat; 06.05.2020
comment
@SridharSarnobat Когда я запускаю run-help history, я вижу документы для fc. Прокрутите вниз, и там написано история: то же, что и fc -l. - person cambunctious; 06.05.2020
comment
Нет, объяснения очень ценны. - person uchuugaka; 04.06.2020
comment
FWIW, в macOS 10.15 и более поздних версиях run-help работает «из коробки»… ¯_(ツ)_/¯ - person uchuugaka; 04.06.2020

Ключевая информация для получения более полезной справочной утилиты на самом деле включена в Zsh, это просто вопрос поиска критической — и плохо обнаруживаемой — справочной страницы: man zshcontrib (здесь в Интернете), в котором описывается виджет run-help:

По умолчанию run-help является псевдонимом для команды man, поэтому это часто дает сбой, когда командное слово является встроенной оболочкой или определяемой пользователем функцией. Переопределив псевдоним run-help, можно улучшить интерактивную справку, предоставляемую оболочкой.

Далее объясняется, как заменить его встроенным улучшением.

После настройки вызов run-help для имен встроенных модулей, функций завершения и т. д. теперь попытается показать вам извлеченную документацию или показать вам правую справочную страницу и т. д. Например, run-help bindkey выводит:

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

что может быть лучше. В качестве лучшего примера, run-help history показывает раздел справочной страницы Zsh для fc, который является командой, лежащей в основе 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.

Для версий Zsh до 5.0.3

Вам, скорее всего, придется следовать процедуре, подробно описанной в man zshcontrib, для создания файлов справки. Это немного раздражает, но в остальном быстро и безболезненно.

Найдите установленную версию с zsh --version и получите соответствующий архив с исходным кодом из архива sourceforge. Затем запустите скрипт helpfiles, как показано на справочной странице, и установите цель как HELPDIR в файле ~/.zshrc.

person ches    schedule 15.08.2011
comment
Сладкий! Есть ссылка на дистрибутив zsh, описанный в этом руководстве? - person John Bachir; 15.08.2011
comment
Не уверен, что вы имеете в виду - сценарий zsh-4.3.12/Util/helpfiles, на который он ссылается? Просто найдите установленную версию zsh с помощью zsh --version, а затем возьмите соответствующий архив с исходным кодом из архива sourceforge. После того, как вы закончите с шагами, вы можете удалить исходный код, который вы загрузили и извлекли, если хотите. Дайте мне знать, если это не то, о чем вы спрашивали! - person ches; 15.08.2011
comment
Для тех из вас, кто использует режим vi-mode ESC-h, он не работает, как описано выше. Вы можете ввести ESC для входа в командный режим, а затем :run-help. Кроме того, вы можете добавить alias help=run-help в свой .zshrc (или туда, где вы храните свои псевдонимы). - person Coren; 12.08.2014
comment
@ntc2 Ваше редактирование кажется неполным — раздел до 5.0.3 теперь начинается с бессмысленного фрагмента предложения. - person ches; 05.04.2016
comment
@ches: извините за это. Теперь это исправлено. - person ntc2; 06.04.2016
comment
На самом деле это не работает для меня в zsh 5.0.5 на os x (используя zsh, который поставляется с os x). Я должен предпринять шаги, описанные в этом ответе: stackoverflow.com/a/35456287/168143 - кто-нибудь знает, почему? - person John Bachir; 05.05.2016
comment
@JohnBachir Подтверждено в той же среде/версии. Не знаете, что здесь делать, потому что часть для ZSH версии 5.0.3 или новее была редактированием, которое не было моим собственным, поэтому, вероятно, должен был быть новый ответ. Я хотел бы повторно отредактировать, чтобы исправить это, как только я смогу попытаться подтвердить поведение в другой среде, но не хочу брать на себя ответственность за ответ lendenmc. Я полагаю, что в худшем случае я просто удалю этот раздел, если не смогу его проверить. - person ches; 05.05.2016
comment
Итак, все в ответе по-прежнему в основном правильно, просто немного, но критически неполно, не подчеркивая необходимость псевдонима run-help switcheroo. Короче говоря, справочная страница по-прежнему дает авторитетный ответ. Я внесу правку в связи с этим. - person ches; 05.05.2016
comment
Если вы используете доморощенную версию zsh на OSX, используйте: HELPDIR="/usr/local/share/zsh/help" - person jsears; 13.01.2017

Попробуйте любой из них:

man zshbuiltins

or

man zshall

Страницы руководства для zsh разделены по темам, man zsh в основном представляет собой оглавление и введение, а man zshall - все (24628 строк в моей системе по сравнению с 5242 строками для man bash).

Что касается bindkey, man zshbuiltins направит вас к man zshzle.

person Dennis Williamson    schedule 10.12.2010
comment
Это изменилось в последнее время? Мой 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. - person anol; 21.04.2015
comment
@anol: Очевидно, это ошибка в 13.10 и 14.04, но она вернулась в 14.10. Вы можете установить их из исходников (информация по ссылке) или просмотреть их онлайн (например, здесь). - person Dennis Williamson; 21.04.2015

Вы можете добавить эти строки в свой .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 с zsh, установленным через Homebrew, эта папка /usr/local/share/zsh/help

Это активирует подобную bash справку для zsh.

Следует отметить, что если путь установки по умолчанию файлов справки вашей оболочки входа в систему zsh существует и содержит нужные файлы, третья строка HELPDIR=/path/to/zsh_help_directory не потребуется.

Загрузите свой .zshrc ($ source .zshrc) и убедитесь, что все работает нормально, например (выберите любой встроенный zsh, который вы хотите, здесь я выбрал autoload):

$ help autoload

Обратите внимание, что часть 2>/dev/null необходима, потому что без нее стандартная ошибка 'unalias: нет такого элемента хэш-таблицы: run-help' будет возникать каждый раз, когда вы используете исходный файл .zshrc, в то время как run-help уже не имеет псевдонима.

person lendenmc    schedule 17.02.2016
comment
Это прекрасно работает. Каким образом zsh ожидает от нас доступа к этим справочным документам? Почему мы должны запускать справку без псевдонима, снова автоматически загружать ее, а затем сообщать ей, где находятся документы? - person John Bachir; 05.05.2016
comment
Также я бы проголосовал за удаление бита alias help=run-help, чтобы сделать более минимальный ответ. - person John Bachir; 05.05.2016
comment
Для тех, кто использует os x zsh по умолчанию, путь справки /usr/share/zsh/5.0.5/help - person John Bachir; 05.05.2016
comment
Кроме того, используя установку системы по умолчанию в OS X, кажется, что вообще не нужно явно устанавливать HELPDIR. У меня работает без этого шага. - person ches; 05.05.2016
comment
Извините, на самом деле поведение с установленным HELPDIR отличается от того, что не установлено — без него он часто напрямую открывает соответствующую справочную страницу, в то время как с ним он ссылается на более целенаправленную информацию, извлеченную инструментами (или иногда менее полезно просто говорит вам открыть справочный документ). страница…). Кстати, @JohnBachir man zshcontrib снова проливает свет на ожидаемое использование. Я предполагаю, что упаковка извлеченной справочной информации является выбором конкретного дистрибутива, поэтому по умолчанию используется псевдоним man. - person ches; 05.05.2016
comment
@JohnBachir, run-help на самом деле не «перезагружается автоматически» («автозагружается снова», как вы выразились). Как поясняется в ответе @ches, сначала run-help всего является псевдонимом для команды man. Итак, как только этот псевдоним удален, вам нужно в первый раз автоматически загрузить функцию run-help, чтобы иметь возможность ее использовать.... если это имеет смысл. - person lendenmc; 15.05.2016
comment
Это довольно круто, но есть ли способ автоматически выбирать, где находятся файлы справки. В частности, /usr/share/zsh/${VERSION}/help, почему еще не определена переменная, определяющая, где находятся эти файлы справки? - person CMCDragonkai; 28.07.2016
comment
@CMCDragonkai, согласно документу. Параметр HELPDIR сообщает run-help, где искать файлы справки. Когда он не установлен, он использует путь установки по умолчанию. Однако на некоторых платформах, таких как OS X El Capitan, zsh по умолчанию устарел и указывает на путь установки, который не завершается. Таким образом, в этом случае, если вы не хотите менять zsh по умолчанию, но хотите, чтобы run-help имел доступ к файлам справки, вам нужно будет указать местоположение с помощью HELPDIR. Если путь установки по умолчанию существует и содержит нужные файлы справки, эта строка вам не понадобится. - person lendenmc; 01.08.2016
comment
Если вы используете доморощенную версию zsh на OSX, используйте: HELPDIR="/usr/local/share/zsh/help" - person jsears; 13.01.2017
comment
Это может быть связано только косвенно, но, по крайней мере, если я экспериментирую, я стараюсь не подавлять stderr. В этом случае я бы использовал что-то вроде alias run-help >/dev/null (подавление stdout чтения), чтобы подавить только те ошибки, которые я учитывал. Псевдонимы могли уже, так сказать, отравить колодец. - person John P; 26.02.2018

Я перешел с 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
}
person John Gilmore    schedule 16.05.2012

с Bash работает «помощь»:

jcomeau@intrepid:~/etc/apache2$ help until
until: until COMMANDS; do COMMANDS; done
    Execute commands as long as a test does not succeed.

    Expand and execute COMMANDS as long as the final command in the
    `until' COMMANDS has an exit status which is not zero.

    Exit Status:
    Returns the status of the last command executed.
person jcomeau_ictx    schedule 10.12.2010
comment
но поскольку в моей системе нет «bindkey», не уверен, поможет ли этот ответ или нет. - person jcomeau_ictx; 10.12.2010
comment
downvoters: обратите внимание, что в исходном сообщении не упоминается zsh, только оболочка. - person jcomeau_ictx; 17.11.2015

Наконец-то мне надоело рыскать по справочным страницам и искать в Интернете каждый раз, когда мне нужно было получить какую-то информацию о Zsh. Я просмотрел все справочные страницы Zsh и собрал хорошую функцию «помощи», которая довольно обширна.

Чтобы использовать это, я бы создал файл с именем «help» где-нибудь в вашем 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 в качестве пейджера и включает поддержку termcap для цветных справочных страниц. Выполнение help без параметров или --help или -h перечисляет зарезервированные слова и встроенные команды. Набрав help с одним из этих слов, вы попадете прямо на соответствующую справочную страницу. Я просмотрел и сузил записи на конкретных справочных страницах, чтобы оптимизировать скорость / эффективность, а не просто использовать man ... zshall. Эта справочная функция находит гораздо больше, чем просто зарезервированные слова и встроенные команды. Он найдет записи для модулей, команд модуля, некоторых важных команд завершения, таких как compadd, compset и т. д.

Многие разделы, посвященные таким вещам, как арифметика, завершение, подстановка, массивы, переменные среды, обработка исключений, отображаются с помощью ввода help math, help complet, help glob, help arrays, help env, help except. Есть подстановочные знаки и несколько терминов соответствия, чтобы сделать функцию справки более удобной. Это довольно простой оператор case с чуть более чем 210 условиями соответствия. Если ничего не совпадает, по умолчанию используется поиск zshall. Если условия соответствия не показывают то, что вы ищете, или вам кажется, что они мешают, введите help -- после условий поиска, чтобы обойти все совпадения.

Я включил многое из того, что описано в справочных страницах Zsh, но его можно было бы сделать умнее или полнее, включив такие вещи, как функции завершения с префиксом подчеркивания.


edit: я сделал функцию bindkey для ^[h (esc/alt + h). 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 - + вкладка распечатывает это:

-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
person jan    schedule 30.09.2015

Хотя это было более сложно в прошлом, по состоянию на 2017 год (Zsh v5.4), получить очень быструю и удобную горячую клавишу справки под пальцами так же просто, как поместить следующее в ваш .zshrc (или эквивалентные установочные файлы):

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

Теперь вы можете просто начать вводить полную команду, которую вы пытаетесь вызвать (последующие опции/аргументы — например, «привет» — игнорируются):

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»
person Micah Elliott    schedule 25.09.2017
comment
Мне было интересно: всегда ли необходимо unalias run-help? Возможно, нет, но, вероятно, это умнее и безопаснее, потому что в моей системе (по крайней мере, и, вероятно, во многих других) run-help имеет псевдоним run-help=man. Таким образом, в некоторых случаях необходимо сначала удалить его. Поскольку сглаживание здесь не помешает, я понимаю, почему включить его — хорошая идея. - person David J.; 10.06.2020

Страница руководства для вашей оболочки, вероятно, расскажет вам.

Используйте функцию поиска вашего пейджера при чтении в оболочке (или функцию поиска вашего браузера). Для less это /search string для начала поиска и n для перехода к следующему совпадению.

person dmckee --- ex-moderator kitten    schedule 10.12.2010
comment
нет упоминания о bindkey или alias (случайный общий, который я выбрал) на странице руководства zsh - person John Bachir; 10.12.2010