2009-06-26 8 views
12

Je vise maintenant montrer le signe de pourcentage également lorsque vous exécutez, par exemple, la commandeImpossible de faire moins d'indiquer l'emplacement en pourcentage

man emacs 

Si vous exécutez, vous obtenez « octet 3300 », par exemple, .

Alex's answer me donne à penser que nous avons besoin de faire une fonction shell séparée par

man "$1"| col -b > /tmp/manual 
less /tmp/manual 

où 1 $ fait référence au premier paramètre.


Le nouveau problème est le thread. Merci à Yuliy pour le déménagement!

+1

Cela semble infiniment récursif. c'est-à-dire que l'appel à l'homme à l'intérieur de la fonction appellera la fonction "homme", pas l'exécutable "homme". – Yuliy

+0

J'ai ouvert un nouveau fil pour le nouveau problème: http://stackoverflow.com/questions/1053707/unable-to-make-a-shell-function-in-bash-zsh –

+0

@Yuliy: Vous avez fait bouger le crux. Nous devons déconnecter la fonction de l'homme d'une façon ou d'une autre en définissant une variable fictive, peut-être. –

Répondre

18

Solution

Une version moins manuelle de knitatoms' answer combiné avec Alex Marteilli's answer fonctionne très bien: passer l'option +Gg à less via son option pager.

Par exemple, essayez

man -P 'less -s -M +Gg' man 

Ceci peut être réalisé de façon permanente en mettant

export MANPAGER='less -s -M +Gg' 

dans l'un de vos fichiers de configuration shell (ci-dessus pour la syntaxe est Bash et ZSH). Maintenant, par exemple, man man affiche le pourcentage que vous voulez !

Avertissement

Vous devriez pas mettre la +Gg dans la variable LESS! Par exemple, faire

export LESS='-M +Gg' 

causera des problèmes lors de la lecture des fichiers très volumineux. Par exemple,

yes | LESS='-M +Gg' less 

ne fonctionne pas très bien ...

Explication

Comme d'autres réponses ont expliqué, le problème est que less ne peut pas dire ce que pour cent dans le fichier que vous êtes jusqu'à ce qu'il sache combien de temps le fichier est, et il ne lit pas à la fin du fichier par défaut lors de la lecture à partir d'un tuyau.

Dans la section OPTIONS de man less:

+  If a command line option begins with +, the remainder of that 
     option is taken to be an initial command to less. For exam‐ 
     ple, +G tells less to start at the end of the file rather than 
     the beginning, and +/xyz tells it to start at the first occur‐ 
     rence of "xyz" in the file. As a special case, +<number> acts 
     like +<number>g; that is, it starts the display at the speci‐ 
     fied line number (however, see the caveat under the "g" com‐ 
     mand above). If the option starts with ++, the initial com‐ 
     mand applies to every file being viewed, not just the first 
     one. The + command described previously may also be used to 
     set (or change) an initial command for every file. 

Les g signifie "retour au début du fichier".

De l'man man:

-P pager, --pager=pager 
     Specify which output pager to use. By default, man uses pager 
     -s. This option overrides the $MANPAGER environment variable, 
     which in turn overrides the $PAGER environment variable. It 
     is not used in conjunction with -f or -k. 

     The value may be a simple command name or a command with argu‐ 
     ments, and may use shell quoting (backslashes, single quotes, 
     or double quotes). It may not use pipes to connect multiple 
     commands; if you need that, use a wrapper script, which may 
     take the file to display either as an argument or on standard 
     input. 
+0

Merci beaucoup pour votre réponse claire! –

+1

@Masi: Merci pour la générosité! – ntc2

+0

Vous êtes les bienvenus! –

13
export LESS="-m" 

Plus généralement, la variable d'environnement LESS peut contenir des options équivalentes à des drapeaux de ligne de commande, vous pouvez explicitement passer lors de l'exécution less - ici, l'option -m qui indique à invite plus riche (y compris le pourcentage, tu as demandé). Vous pouvez également transmettre plusieurs options dans cette variable d'environnement unique en terminant par $. Pour plus d'informations, voir less's manpage.

Modifier: il est bien sûr possible (selon la façon dont vous utilisez moins, par exemple si vous êtes à la tuyauterie plutôt que d'appeler sur un fichier) que moins ne savent la taille totale il sera affiché, auquel cas il ne peut pas afficher le% - dans ce cas, il demandera avec quelle petite information il a, par exemple, combien de texte il a montré jusqu'ici. Par exemple, man utilise less de cette manière, par tuyauterie.

Ainsi, si votre besoin spécifique est de voir le% en man (plutôt que lorsque vous appelez less directement sur un fichier), vous devez utiliser un « pager alternatif » (sur la ligne de commande man variable d'environnement MANPAGER ou changer -P) qui est un script simple qui enregistre la sortie man dans un fichier temporaire, puis utilise less sur ce dernier. (Cela peut perdre la "colorisation" de l'homme sauf si vous jouez encore des trucs plus profonds, etc.). De même, vous pouvez utiliser l'option "preformat pages" de man et décompresser une telle page préformatée en un fichier temp sur lequel exécuter less, etc, mais cela commence à devenir un "script simple" quelque peu complexe ;-).

+0

@Alex: Il semble que quelque chose ne va pas dans mon Moins, puisque je vois: http://files.getdropbox.com/u/175564/bugLess.png. Quand je vais à la fin du manuel, le signe pourcentage commence à fonctionner. --- J'ai désactivé mon .zshrc pour que le bug ne puisse pas y être. –

+0

C'est possible (en fonction de la façon dont vous utilisez moins, par exemple si vous utilisez un tuyau plutôt que de l'appeler sur un fichier) qui ne * connait * pas * la taille totale qu'il affichera, auquel cas bien sûr il ne peut pas montrer le%. Ici, laissez-moi éditer la réponse avec cette remarque pour l'exhaustivité. –

+0

@Alex: S'il vous plaît, voir ma tentative à vos suggestions dans ma question. –

1

Je l'ai dans mon environnement. Il imprimera <filename> - Lines X-Y of Z en bas, ou au moins autant de cette information qu'il a.

export LESS='-P?f%f - .?ltLine?lbs. %lt?lb-%lb.?L of %L.:?pt%pt\%:?btByte %bt:-...' 
+0

@John: J'utilise OS/X. Votre code n'a aucun effet dans mon moins. Il ne supprime que les numéros de ligne définis par% export. LESS = '- N'% –

+0

Vous pouvez obtenir à peu près la même chose avec '-M', mais merci de me montrer comment cela se passe en coulisses! –

8

Pour ajouter à la réponse « Alex Martelli:

Notez que vous pouvez également passer un paramètre de ligne de commande à moins à l'exécution, en tapant simplement qu'il (y compris la -), suivi par la touche entrée. Donc, vous pouvez simplement taper

-m<Enter> 

en cours d'exécution moins de basculer l'invite longue.

Ceci est particulièrement utile pour les options qui doivent être modifiées au moment de l'exécution, par ex. -S (ligne de pliage on/off).

+0

@sleske: L'option -S doit-elle donner des plis similaires à ceux de Vim? --- Il semble supprimer les lignes vides en double par une ligne vide. –

+1

Non, -S (Maj-S) ne fait qu'encapsuler des lignes au lieu de les couper au bord de l'écran. Ce que vous voyiez était -s (juste un petit s), qui supprime en effet les lignes vides en double. – sleske

10

Sur Linux Je viens d'aller à la fin de la page de manuel avec Maj +G puis retour au début avec g. (Ou vous pouvez revenir à votre position précédente avec ''). Moins alors a assez d'informations pour afficher le pourcentage de la longueur à travers le fichier que vous êtes. (Vous devrez peut-être taper -M pour obtenir l'invite longue.)

C'est un peu un hack mais seulement deux presses. Je ne sais pas si cela fonctionne sur OS/X.

3

Avec un moteur d'exécution less en direct je -M.

C'est "-MEntrez" à l'invite : avec moins de fonctionnement.

Avec de très gros tampons, j'ai aussi dû aller jusqu'au bout pour "découvrir" leur taille. Fin et retour Accueil.


Note: J'ai posté un commentaire à la réponse de @sleske, mais je me rappelle enfin, les commentaires ne prennent pas en charge <kbd>Keyboard<kbd> tags.

Questions connexes