2009-06-26 1 views
12

ora mi propongo di mostrare il segno di percentuale anche quando si esegue, ad esempio, il comandoImpossibile rendere meno per indicare posizione in percentuale

man emacs 

Se lo si esegue, si ottiene 'byte 3300', per esempio .

Alex's answer mi suggerisce che dobbiamo fare una funzione di shell separata

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

dove $ 1 si riferisce al primo parametro.


Il nuovo problema è allo thread. Grazie a Yuliy per la mossa cruciale!

+1

Questo sembra infinitamente ricorsivo. cioè la chiamata all'uomo all'interno della funzione chiamerà la funzione 'man', non l'eseguibile' man'. – Yuliy

+0

Ho aperto una nuova discussione per il nuovo problema: http://stackoverflow.com/questions/1053707/unable-to-make-a-shell-function-in-bash-zsh –

+0

@Yuliy: Hai fatto la mossa cruciale. Abbiamo bisogno di dissipare la funzione uomo in qualche modo impostando una variabile fittizia su di esso, forse. –

risposta

18

Soluzione

Una versione meno manuale del knitatoms' answer combinato con Alex Marteilli's answer funziona abbastanza bene: passare l'opzione +Gg per less tramite l'opzione cercapersone.

Ad esempio, provare

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

Questo può essere effettuato in modo permanente mettendo

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

in uno dei file di configurazione della shell (sopra sintassi è per Bash e ZSH). Ora, ad esempio, man man visualizza la percentuale desiderata come !

Attenzione

Si dovrebbe non mettere il +Gg nella variabile LESS! Ad esempio, facendo

export LESS='-M +Gg' 

causerà problemi durante la lettura di file molto grandi. Ad esempio,

yes | LESS='-M +Gg' less 

non funziona molto bene ...

Spiegazione

Come altre risposte hanno spiegato, il problema è che non si può dire less quale percentuale nel file che si sta fino a quando non sa per quanto tempo il file è, e non legge fino alla fine del file per impostazione predefinita quando legge da una pipe.

Dalla sezione OPTIONS di 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. 

Le g significa "tornare all'inizio del file".

Dal 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

Grazie mille per la tua risposta chiara! –

+1

@Masi: Grazie per la taglia! – ntc2

+0

Prego! –

13
export LESS="-m" 

Più in generale, la variabile LESS ambiente può contenere opzioni equivalenti alle bandiere della riga di comando è possibile passare in modo esplicito quando si esegue less - qui, l'opzione -m che dice che per richiedere più ricca (compresa la percentuale, come hai chiesto). Puoi passare anche più di una opzione all'interno di quella singola variabile d'ambiente terminando ciascuna con uno $. Per ulteriori informazioni, vedere less's manpage.

Edit: è ovviamente possibile (a seconda di come si sta utilizzando di meno, ad esempio, se siete tubazioni ad esso piuttosto che chiamare su un file) che meno non conosce la dimensione totale si metterà in mostra, in questo caso, naturalmente, non può mostrare la% - in questo caso vi verrà chiesto con quel poco di informazioni che ha, ad esempio, quanto testo ha mostrato finora. Ad esempio, man fa utilizzare less questo modo, da una tubazione.

Quindi, se il vostro bisogno specifico è quello di vedere il% in man (piuttosto che al momento della chiamata less direttamente su un file), è necessario utilizzare un "pager alternativo" (variabile d'ambiente MANPAGER o passare -P sulla riga di man di comando) che è un semplice script che salva in uscita man s' ad un file temporaneo e quindi utilizza less su quest'ultimo. (Che può perdere proprio "colorazione" dell'uomo a meno che non si gioca ulteriormente e trucchi più profonde, ecc, ecc - Allo stesso modo è possibile utilizzare l'opzione "pagine preformat" di man e decomprimere pagina, preformattato per un file temporaneo su cui eseguire less, ecc., ma questo sta iniziando a diventare un "script semplice" piuttosto complesso ;-).

+0

@Alex: Sembra che ci sia qualcosa di sbagliato nel mio Less, poiché vedo: http://files.getdropbox.com/u/175564/bugLess.png. Quando vado alla fine del manuale, il segno di percentuale inizia a funzionare. --- Ho disabilitato il mio .zshrc in modo che il bug non possa esserci. –

+0

È possibile (a seconda di come si sta usando meno, ad esempio se si sta eseguendo il piping piuttosto che chiamarlo su un file) che meno non * sa * la dimensione totale che verrà visualizzata, nel qual caso ovviamente non può mostrare il%. Qui, lascia che modifichi la risposta con questa osservazione per completezza. –

+0

@Alex: Per favore, vedi il mio tentativo di dare suggerimenti nella mia domanda. –

1

ho questo nel mio ambiente. Stamperà <filename> - Lines X-Y of Z in fondo, o almeno la maggior parte delle informazioni che ha.

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

@ John: io uso OS/X. Il tuo codice non ha alcun effetto sul mio Less. Rimuove solo i miei numeri di linea impostati da% export LESS = '- N'% –

+0

Puoi ottenere praticamente la stessa cosa con '-M', ma grazie per avermi mostrato come è fatto dietro le quinte! –

8

Per aggiungere alla risposta di Alex Martelli':

Si noti che è anche possibile passare qualsiasi parametro di riga di comando per meno in fase di esecuzione, semplicemente digitandolo (compreso il -), seguito dal tasto Invio. Quindi puoi semplicemente digitare

-m<Enter> 

in una corsa inferiore per attivare il prompt lungo.

Ciò è particolarmente utile per le opzioni che hanno bisogno di essere cambiato in fase di esecuzione, per esempio -S (piegamento linea on/off).

+0

@sleske: l'opzione -S deve dare pieghe simili a quelle di Vim? --- Sembra rimuovere le linee vuote duplicate da una linea vuota. –

+1

No, -S (Shift-S) avvolge semplicemente le linee, anziché tagliarle sul bordo dello schermo. Quello che stavi vedendo era -s (solo piccoli s), che rimuove effettivamente le linee vuote duplicate. – sleske

10

Su Linux mi basta andare fino alla fine della pagina uomo con Maiusc +G poi tornare all'inizio con g. (Oppure è possibile tornare alla posizione precedente con '').

Meno quindi ha informazioni sufficienti per visualizzare la percentuale di quanto è lungo il file che si è. (Potrebbe essere necessario digitare -M per ottenere il prompt lungo.)

È un po 'un hack ma solo due tasti premuti. Non sono sicuro se questo funziona su OS/X.

3

Con un less runtime dal vivo ho usato -M.

Ecco "-MEnter" al prompt : con meno corsa.

Con buffer molto grandi, ho anche dovuto andare alla fine per "scoprire" le loro dimensioni. Fine e ritorno Casa.


Nota: avrei postato come commento alla risposta @sleske s', ma lo scorso mi ricordo, i commenti non supportano <kbd>Keyboard<kbd> tag.