it-swarm.it

Come seguire i collegamenti nelle pagine man di linux?

C'è un modo per seguire i link menzionati in una pagina man? Ad esempio, ecco la pagina man per ps; come accedo al collegamento contrassegnato in rosso?

Screenshot of the ps man page

101
its_me

Le pagine man risalgono a nix First Edition . Mentre ipertesto era stato inventato, era ancora nella prima infanzia; la rete era lontana due decenni e il manuale era un vero libro stampato, spesso con un comando per pagina se si adattava (ecco perché venivano chiamati pagine).

Il formato utilizzato per le pagine di manuale si è evoluto in qualche modo da allora, ma la maggior parte delle pagine non sono realmente progettate per l'ipertesto e il programma predefinito man non lo supporta (è solo un semplice visualizzatore di testo, con hack per il supporto alcune formattazioni di base). Esistono tuttavia programmi di visualizzazione delle pagine man che ricostruiscono alcuni collegamenti ipertestuali, principalmente collegamenti ad altre pagine man, che sono tradizionalmente scritti nella forma man(1) dove man è il nome della pagina man e 1 è il numero sezione :

  • tkman , un visualizzatore di pagine man GUI con collegamenti ipertestuali
  • WoMan ( wiki , man comparars , ex ), un browser di pagine man per Emacs, che supporta hyperlink
  • man2html , un convertitore da uomo a HTML (più un browser web per leggere il risultato)

Puoi sfogliare le pagine del manuale di diversi sistemi operativi, convertiti in HTML da man2html o strumenti simili, su un numero di siti online, ad esempio:

Qualche tempo dopo che le pagine man erano diventate il formato di documentazione stabilito su unix e qualche tempo prima che fosse inventata la rete, il progetto GNU ha introdotto il info formato di documentazione, più avanzato dell'uomo rispetto al semplice markup progettato per terminali di testo. La principale innovazione delle informazioni rispetto all'uomo era quella di avere una documentazione multi-pagina con collegamenti ipertestuali ad altre pagine. Informazioni è ancora il formato di documentazione preferito per GNU, sebbene la maggior parte delle pagine di informazioni siano generate da una fonte Texinfo (o talvolta altri formati) che può anche generare HTML. esiste una documentazione informativa per un programma, spesso è il manuale principale, mentre le pagine man contengono solo informazioni di base sugli argomenti della riga di comando.

Prima di tutto, non è un collegamento. È solo una sottolineatura. Le pagine man sono solo documenti di testo con un po 'di formattazione semplice che un terminale può gestire. La sottolineatura è solo un punto culminante, non vi è alcun "collegamento" coinvolto.

Il normale comando man è solo un formattatore di testo. In effetti il ​​comando man non visualizza nemmeno il testo, man semplicemente formatta le informazioni memorizzate nel file della pagina man[1] e invia l'output formattato a un altro programma (di solito less) che visualizza l'output formattato sullo schermo. Questi programmi di visualizzazione non hanno alcun concetto di collegamenti.

Ci sono alcuni lettori di documentazione speciale che potrebbero essere in grado di guardare alla formattazione in quel modo e fare un'ipotesi colta che un tale punto culminante potrebbe indicare che esiste una pagina man correlata che potrebbe essere tirata su e creare un collegamento, ma non lo so quali fanno. Forse pinfo?

Se desideri una formattazione simile al web con collegamenti ipertestuali, puoi trovare quasi tutte le pagine man di UNIX online con collegamenti aggiunti. Prova a digitare man [anything] in google e quasi sicuramente ne otterrai uno nei primi successi di coppia.

Nel caso del tuo esempio, l'evidenziazione visiva è un indizio del fatto che quello è un altro nome di programma che ha la sua pagina man che puoi facilmente estrarre. Provare man 1 top. Il 1 indica la sezione delle pagine man in cui cercare. Vedi questa domanda per una spiegazione delle sezioni: Cosa significano i numeri in una pagina man?


[1] Se si apre il file di pagina man in un editor di testo, verrà visualizzata la pagina man non formattata per una facile lettura. La pagina raw man è scritta in un linguaggio di markup chiamato troff. Per ulteriori informazioni su troff e su come scrivere una man pagina, consultare: https://liw.fi/manpages/ .

39
Caleb

Questa è una risposta molto tardi, ma usa w3mman. w3mman è il cercapersone manuale del sistema di w3m.

https://linux.die.net/man/1/w3mman

Puoi provarlo installando il pacchetto w3m. Credo che questo pacchetto sia registrato nei repository software della maggior parte delle principali distribuzioni Linux/UNIX e Cygwin.

13
akawaguc

Vorrei provare a interpretare la tua domanda un po 'di più in un senso in cui provo a seguire il tuo flusso di lavoro. Ciò che probabilmente vorresti avere è una combinazione di tasti all'interno di una pagina man che ti porta direttamente ai comandi sottolineati di cui stai leggendo. Quindi, non dover installare qualcos'altro, né aprire un'altra console e dimenticare l'esatta sintassi, ad esempio.

Questa soluzione più semplice è il punto esclamativo (se si utilizza less per visualizzare le pagine man) e si desidera andare al sottolineato top:

!man top

O

!man 1 top

Dovrai chiuderli tutti premendo q più volte. Nota anche che questo non funzionerà se LESSSECURE=1 è impostato come variabile ambientale che farebbe funzionare less in modalità sicura e non ti permetterebbe di usare !. Ti dirà qualcosa come "Comando non disponibile".

11
Anne van Rossum

Sebbene w3mman sia una soluzione per seguire i collegamenti, non usa tutto lo schermo (almeno su Ubuntu 12.10)

Preferisco usare:

$ Sudo su -
# apt-get install w3m man2html
# exit
$ alias man=' hman -P w3m'

aggiungi l'ultimo comando a ~/.bash_aliases o uno script di avvio simile per ottenerlo in ogni sessione.

Il - P w3m è perché il primo browser per hman è lynx o browser sensibile ma I preferisci w3m

hman è uno strumento in bundle su html2man. Vedi questo

Se uscire con la conferma ti dà fastidio, per me è usare questo

2
albfan

Come hanno detto, non è stato progettato per questo.

Puoi usare info man e poi premi invio una volta che sei sotto VEDERE ANCHE sezione sul tuo oggetto.

info: leggi i documenti informativi

2
binarytrails

In particolare per Ubuntu, c'è Yelp. È installato di default ed è di default in grado di visualizzare pagine di manuale, anche se l'invocazione per farlo, non è la stessa di quella del comando man; un alias o una funzione Shell possono aggirare l'ultimo punto (dipende dalla Shell).

Yelp 'man:exit'

L'impostazione predefinita è una sezione in un modo che non conosco. Promemoria: per ottenere l'elenco delle sezioni per un argomento manuale, utilizzare whatis, come in whatis exit.

Per richiedere a Yelp di visualizzare una pagina di manuale da una sezione specifica, ad esempio 2, procedi come segue:

Yelp 'man:exit(2)'

Problemi: Yelp presenta bug ed è pronto a ricevere più errori di output quando viene richiamato dalla riga di comando. Inoltre, un alias o una funzione Shell personalizzata può aiutare a reindirizzare tutti gli errori a /dev/null

2
Hibou57

Ho un (paio) di hack.

hack 1

Inseriscilo nel tuo ~/.bashrc o nel tuo ~/.zshrc

function man(){
    for arg in "[email protected]"; do
        vim -c 'execute "normal! :let no_man_maps = 1\<cr>:runtime ftplugin/man.vim\<cr>:Man '"${arg}"'\<cr>:wincmd o\<cr>"'
    done
}

Immagine dello schermo..

manual in vim screenshot

Asciinema ..

https://asciinema.org/a/130131

Adesso..

  1. quando digiti man vim, ad esempio, aprirà questa pagina man in vim

    • se digiti man man vim, ad esempio, aprirà prima il manuale di man e dopo aver chiuso vim, aprirà il manuale di vim
  2. quando si preme K (che è la maiuscola k) quando ti trovi in ​​un'altra pagina man in fondo (la sezione VEDERE ANCHE), passerai a questo manuale (purtroppo all'interno di un cercapersone in meno - questo perché abbiamo let no_man_maps = 1; se non lo fai, allora vim forzerà q ad essere :q e non sarai in grado di registrare facilmente una macro e vim potrebbe comportarti in modo strano in altri modi).

    • uscendo da questo secondo manuale che hai inserito tornerai al manuale precedente che stavi visualizzando
  3. ottieni un'evidenziazione della sintassi molto carina poiché hai caricato ftplugin/man.vim e ft è (automaticamente) impostato su man.

  4. puoi copiare e incollare, navigare liberamente in vim e persino modificare il buffer e :w ~/usefulfile. Puoi fare tutto ciò che normalmente faresti in vim, comprese le macro dei record, trascinare negli appunti con "+y (se hai +clipboard), ecc. ecc.

Lo trovo molto più bello di meno.

L'unica battuta d'arresto minore che ho trovato (che esiste ancora se usi meno come cercapersone) è se vuoi avere più manuali aperti in una sessione vim. Non vedo davvero un modo per farlo.

Alcune note:

  1. se provi a salvare il buffer, otterrai E382: Cannot write, 'buftype' option is set

    • Mi piace il fatto che non è possibile salvare in quanto impedisce di salvarlo accidentalmente
  2. puoi ancora salvare come :w /tmp/man.man

    • se lo salvi con un .man extension, quindi aprendolo imposterai il tipo di file su man per te
    • se non lo salvi con un .man estensione, puoi semplicemente impostare ft su man eseguendo :set ft=man
  3. se devi fare delle cose quando apri le pagine man puoi usare autocmd VimEnter *.~ echom 'hooray, we are using vim for man pages!', per esempio.

  4. Ho inserito quanto segue nel mio vimrc in modo da poter premere K per provare ad aprire il manuale, quindi premere G per tornare al manuale precedente:


augroup man
    autocmd!
    autocmd VimEnter *.~ nnoremap B :execute "normal! `Z"<cr>
    autocmd VimEnter *.~ nnoremap <buffer> K :execute "normal! mZyiw:Man \<lt>c-r>\"\<lt>cr>"<cr>
augroup END

hack 2

mettilo nel tuo ~/.bashrc o ~/.zshrc

function man(){
    declare -a args
    for arg in "[email protected]"; do
        command man "$arg" > "/tmp/${arg}.man"
        args+=("/tmp/${arg}.man")
    done
    vim "${args[@]}"
}

Immagine dello schermo..

multiple manuals in vim

Asciinema ..

https://asciinema.org/a/9Q6Si90Pi46cDVUknxFxfIwsv

Questo risolve il problema che hacking 1 e less face (ora puoi visualizzare più manuali in un buffer), ma è meno elegante.

Appunti:

  1. [~ # ~] importante [~ # ~] se vuoi hack2 per funzionare, quindi devi inserire :let no_man_maps = 1 nella tua ~/.vimrc. Questo perché vim fornirà .../vim80/man.vim e q verranno rimappati forzatamente a :q.

  2. c'è più pulizia in gioco (ora memorizzi ogni manuale in /tmp/*. man)

  3. ora puoi, tuttavia, visualizzare più pagine man in una sessione, come notato sopra

  4. se si preme K, aprirai comunque una nuova sessione di vim

    • se vuoi puoi associare un autocmd (usando un autocmd come quello sopra) per fare qualcosa come autocmd VimEnter man.~ nnoremap <buffer> K :execute "normal! Byt(:silent !man \<c-r>\" > /tmp/\<c-r>\".man\<cr>:edit /tmp/\<c-r>\".man\<cr>" o qualcosa di pazzo del genere ( non testato )
2
Dylan

Sono stato in grado di utilizzare il --html argomento su man per aprirlo nel browser definito dalla variabile d'ambiente $ BROWSER, quindi:

BROWSER=google-chrome man ps --help

Sto usando Fedora. Non sei sicuro che funzioni per la tua distribuzione, prova e segnala nei commenti.

1
tutuDajuju