Comment accéder à un titre spécifique dans une page de manuel?

9

Exemple: ssh_config

J'ai défini un type de fichier dans vim pour cela. Je veux que le programme d'aide soit

man

Bien sûr, cela ne fonctionne pas, si je suis sur un mot, dites

ServerAliveCountMax

Je reçois une erreur, car il n'y a pas de pager man pour ServerAliveCountMax, il se trouve dans la page de manuel de ssh_config.

Existe-t-il un moyen, à partir de la ligne de commande, de passer à une chaîne ou d'exécuter un type de commande à l'intérieur de man? Tout comme les informations en fait:

info screen Miscellaneous

m'amènera à la section Divers de la page d'informations sur les écrans.

Est-ce possible avec l'homme? Même l'exécution d'une recherche servirait ...

EDIT: J'utilise OSX 10.6.5. avec l'homme par défaut (/ usr / bin / man)

EDIT: Je parle un peu de dialecte;), donc j'ai été conduit à la bonne réponse:

man -P 'less -p PATTERN' ssh_config  

L'invocation est-elle sur OSX / * BSD?

chiggsy
la source

Réponses:

11

Depuis la ligne de commande pour GNU man:

man --pager='less -p ^ENVIRONMENT' man

ou pour BSD man:

man -P 'less -p ^ENVIRONMENT' man

passera à l'en-tête "ENVIRONNEMENT" de la page de manuel de man.

Voici une fonction pratique:

mans () {    # Bash
    local pages string
    if [[ -n $2 ]]
    then
        pages=(${@:2})
        string="$1"
    else
        pages=$1
    fi
    # GNU man
    man ${2:+--pager="less -p \"$string\" -G"} ${pages[@]}
    # BSD man
    # man ${2:+-P "less -p \"$string\" -G"} ${pages[@]}
}

Exemples:

Utilisez normalement:

mans bash

Accédez à la rubrique "DESCRIPTION":

mans ^DESCRIPTION bash

Accédez successivement à la rubrique "DESCRIPTION" de chaque page de manuel (appuyez sur qet Enterpour passer à la suivante):

mans ^DESCRIPTION bash ksh zsh

Accédez au sous-titre "Expansion des paramètres" (vous pouvez rechercher n'importe quelle chaîne à l'aide d'expressions régulières):

mans '^ *Parameter Expansion' bash

Recherchez l'expression la plus récente que vous avez utilisée dans Less:

mans '' bash

La correspondance que vous avez recherchée ne sera pas mise en surbrillance. Si vous préférez que ce soit le cas, supprimez simplement -Gles options less.

Cette fonction ne tente pas de gérer les autres arguments et options pris en mancharge.

En pause jusqu'à nouvel ordre.
la source
prometteur, j'ai édité ma question, je vois que vous avez exécuté cela en utilisant macports ou linux, j'ai une option -P dans la liste d'options de style BSD merdique ... en train d'essayer.
chiggsy
Merci, je l'ai, mais merci encore! BAH, je ne peux pas voter à nouveau votre nouvelle réponse :(
chiggsy
@Chiggsy: Je suppose que ça marche -P. Si oui, je vais l'ajouter à ma réponse.
pause jusqu'à nouvel ordre.
Pour mémoire, j'ai voté pour votre réponse originale. C'était tout à fait correct. Votre modification, je n'ai pas pu voter. Je voulais quand même ...
chiggsy
@Chiggsy: Dois-je ajouter le -Pstyle BSD à ma réponse pour référence future?
pause jusqu'à nouvel ordre.
2

Vous pouvez utiliser une PAGERvariable pour cette exécution pour éviter un problème de compatibilité BSD / GNU.

Utilisez des "guillemets si le titre de la section contient des espaces:

PAGER='less -p ^"ENVIRONMENT"' man man

user503963
la source
1

/en moins fera une recherche avant, et ?fera une recherche inverse. Appuyez hpour voir une liste complète.

Ignacio Vazquez-Abrams
la source
Voir mon commentaire ci-dessus, et en fait, ma question.
chiggsy
1

Dans man, vous pouvez taper /suivi d'un motif pour correspondre, par exemple pour trouver la section DEFAULT KEY BINDINGS de la page de manuel de l'écran que vous taperiez

/^DEFAULT KEY BINDINGS
user9517
la source
Oui. C'est vrai, mais il faut être en homme pour le faire. Je veux passer du shell à cela en une seule étape.
chiggsy
1

J'utilise une astuce simple pour sauter relativement rapidement entre les sections des pages de manuel: je tape /^[A-Z]puis je peux appuyer sur net Npour avancer et reculer.

Le regex de recherche utilise la structure de base des pages de manuel typiques - Les sections principales sont écrites en majuscules et commencent une ligne sans indentation, elles doivent donc apparaître au début des lignes.

Doron Behar
la source
1

Je n'aime pas la solution --pager/ -P, car elle manpourrait être utilisée mais ne pas être appelée directement (par exemple lorsque vous l'utilisez git help ...). L'utilisation d'un envvar est donc plus flexible. Mais je trouve l'utilisation d'une PAGER='less ...sorte de redondance, car lessc'est généralement le pager par défaut de toute façon. Vous pouvez utiliser l' LESSenvvar pour transmettre directement des paramètres à less. Cela a également moins de problèmes de citation. Par exemple, cela passera correctement à la bonne section, même si elle contient un espace:

LESS="-p file system" git help glossary
David Ongaro
la source
1
Jusqu'au sommet avec cette réponse! Merci :)
Patryk Obara