2009-06-26 13 views
12

Ich ziele darauf ab jetzt auch das Prozentzeichen zeigen, wenn Sie laufen, zum Beispiel den Befehlkann nicht weniger machen Position in Prozent, um anzuzeigen,

man emacs 

Wenn Sie es ausführen, Sie ‚Byte 3300‘ zum Beispiel erhalten .

Alex's answer schlägt mir, dass wir eine eigene Shell-Funktion von

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

machen müssen, wo 1 $ auf den ersten Parameter bezieht.


Das neue Problem ist am thread. Danke an Yuliy für den entscheidenden Zug!

+1

Das sieht unendlich rekursiv aus. d.h. der Ruf an den Menschen innerhalb der Funktion wird die Funktion "Mann" nennen, nicht den ausführbaren "Mann". – Yuliy

+0

Ich öffnete einen neuen Thread für das neue Problem: http://StackOverflow.com/Questions/1053707/unable-to-make-a-Shell-Function-in-Bash-Zsh –

+0

@Yuliy: Sie haben die Crux verschieben. Wir müssen die Mann-Funktion irgendwie lösen, indem wir vielleicht eine Dummy-Variable darauf setzen. –

Antwort

18

Lösung

Eine weniger manuelle Version von knitatoms' answer mit Alex Marteilli's answer Werken kombiniert recht gut: übergeben Sie die +Gg Option less über seinen Pager-Option.

Zum Beispiel versuchen

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

Dies kann, indem

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

in einem Ihrer Shell-Konfigurationsdateien permanent erfolgen (siehe oben Syntax ist für Bash und ZSH). Jetzt, zum Beispiel, man man zeigt den Prozentsatz wie Sie gesucht!

Warnung

Sie sollten nicht setzen die +Gg in der LESS Variable! Zum Beispiel tun

export LESS='-M +Gg' 

wird zu Problemen führen, wenn sehr große Dateien zu lesen. Zum Beispiel

yes | LESS='-M +Gg' less 

nicht sehr gut ...

Erklärung

Wie andere Antworten haben erklärt, nicht funktioniert, ist das Problem, dass less nicht sagen kann, wie viele Prozent in die Datei, die Sie bis es weiß, wie lange die Datei ist, und es liest nicht standardmäßig bis zum Ende der Datei beim Lesen von einer Rohrleitung.

Vom OPTIONS Abschnitt 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. 

Die g bedeutet "Rückkehr zum Anfang der Datei".

Vom 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

Vielen Dank für Ihre klare Antwort! –

+1

@Masi: Danke für die Prämie! – ntc2

+0

Gern geschehen! –

13
export LESS="-m" 

Allgemeiner die LESS Umgebungsvariable gleichwertige Optionen Befehlszeilen-Flags enthalten können Sie explizit passieren könnte, wenn less laufen - hier die -m Option, die es erzählt reicher aufzufordern (einschließlich der Prozentsatz, wie du hast gefragt). Sie könnten auch mehr als eine Option innerhalb dieser einzelnen Umgebungsvariablen übergeben, indem Sie sie jeweils mit einer $ beenden. Weitere Informationen finden Sie unter less's manpage.

bearbeiten: es ist natürlich möglich (je nachdem, wie Sie verwenden weniger, wenn Sie zB Rohrleitungen, um es anstatt es auf einem Aufruf der Datei sind), dass weniger nicht weiß die Gesamtgröße es wird angezeigt, in diesem Fall kann es natürlich nicht% anzeigen - in diesem Fall wird es mit der kleinen Information, die es hat, zB wie viel Text es bisher gezeigt hat, geantwortet. Zum Beispiel, man verwendet less auf diese Weise, durch Verrohrung.

Also, wenn Ihr spezifischer Bedarf besteht, die% in man (statt, wenn less direkt auf eine Datei aufrufen) zu sehen, benötigen Sie einen „alternativen Pager“ (Umgebungsvariable MANPAGER oder -P auf der man Befehlszeilenschalter) verwenden Dies ist ein einfaches Skript, das die Ausgabe von man in eine temporäre Datei speichert und dann less für letzteres verwendet. (Das kann die eigene "Kolorisierung" des Menschen verlieren, es sei denn, Sie spielen noch weitere und tiefere Tricks usw.). Sie können auch die Option "Vorformat-Seiten" von man verwenden und eine solche vorformatierte Seite in eine temporäre Datei dekomprimieren, auf der less laufen soll. etc, aber das fängt an, ein etwas komplexes "einfaches Skript" zu werden ;-).

+0

@Alex: Es scheint, dass etwas in meinem Less falsch ist, da ich sehe: http://files.getdropbox.com/u/175564/bugLess.png. Wenn ich ans Ende des Handbuchs gehe, beginnt das Prozentzeichen zu arbeiten. --- Ich habe meine .zshrc deaktiviert, damit der Bug nicht drin sein kann. –

+0

Es ist möglich (abhängig davon, wie Sie weniger verwenden, z. B. wenn Sie eine Datei anhängen, anstatt sie anzurufen), dass weniger * die * Gesamtgröße, die angezeigt wird, * nicht bekannt ist. In diesem Fall natürlich Es kann nicht% angezeigt werden. Lassen Sie mich hier die Antwort mit dieser Bemerkung der Vollständigkeit halber bearbeiten. –

+0

@Alex: Bitte sehen Sie meinen Versuch, Ihre Vorschläge in meiner Frage. –

1

Ich habe dies in meiner Umgebung. Es wird <filename> - Lines X-Y of Z am unteren Rand drucken, oder mindestens so viele Informationen wie es hat.

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

@John: Ich benutze OS/X. Dein Code hat in meinem Less keinen Effekt. Es löscht nur meine durch% export definierten Zeilennummern. LESS = '- N'% –

+0

Mit '-M' kannst du fast dasselbe erreichen, aber danke, dass du mir gezeigt hast, wie es hinter den Kulissen funktioniert! –

8

Um zu Alex Martelli‘Antwort hinzufügen:

Beachten Sie, dass Sie auch eine beliebigen Befehlszeilenparameter auf weniger zur Laufzeit, ist es nur durch die Eingabe passieren können (einschließlich der -), gefolgt von Enter-Taste. Sie können also einfach

-m<Enter> 

in eine laufende weniger eingeben, um die lange Eingabeaufforderung umzuschalten.

Dies ist besonders nützlich für Optionen, die zur Laufzeit geändert werden müssen, z. -S (Zeilenumbruch ein/aus).

+0

@sleske: Sollte die Option -S Falten ähnlich wie in Vim geben? --- Es scheint, doppelte Leerzeilen durch eine leere Zeile zu entfernen. –

+1

Nein, -S (Shift-S) umschließt Zeilen, anstatt sie am Bildschirmrand zu schneiden. Was Sie sahen, war -s (nur kleine s), die in der Tat doppelte Leerzeilen entfernt. – sleske

10

Unter Linux Ich gehe nur bis zum Ende der Mannes Seite mit Shift- + G dann mit g zum Anfang zurückzukehren. (Oder Sie können mit '' zu Ihrer vorherigen Position zurückkehren.

Less hat dann genug Informationen, um den Prozentsatz anzuzeigen, wie weit Sie durch die Datei sind. (Sie müssen möglicherweise -M eingeben, um die lange Eingabeaufforderung zu erhalten.)

Es ist ein bisschen wie ein Hack, aber nur zwei Tastendrücke. Nicht sicher, ob dies auf OS/X funktioniert.

3

Mit einer Live-less Laufzeit I -M verwendet.

Das ist "-MGeben Sie" an der : Eingabeaufforderung mit weniger ausgeführt.

Mit wirklich großen Puffern musste ich auch bis zum Ende gehen, um ihre Größe zu "entdecken". Ende und zurück Start.


Anmerkung: Ich als Kommentar zu @sleske ‚s Antwort geschrieben hätte, aber im letzten ich mich erinnere, Kommentare nicht unterstützt <kbd>Keyboard<kbd> Tags.