Manpages-Syntax hervorheben?


7

Gibt es eine Möglichkeit, die Ausgabe von Manpages zu "kolorieren"? Ich meine - die Ausgabe von zum Beispiel:

man command_name

Antworten:


7

Ich verwende die folgende Shell-Funktion, um Manpages in Vim anzuzeigen, die eine nette Syntax-Hervorhebung bietet:

man() {
  /usr/bin/man $* | \
    col -b | \
    vim -R -c 'set ft=man nomod nolist' -
}

1
und schließlich werde ich nicht versehentlich die ganze Zeit j drücken
daithib8

1
Nun, jfunktioniert auch in weniger gut :)
Adam Byrtek

1
Sie sollten jedoch zu wechseln $*, "$@"um mögliche Probleme mit Leerzeichen zu vermeiden. Ansonsten vielen Dank!
Scott Severance

1
Ich schlage eine kleine Modifikation vor, um dem lessStil näher zu kommen : Ersetzen vimdurch /usr/share/vim/vim72/macros/less.sh.
Enzotib


4

Aha. Das Hinzufügen zu ~ / .bashrc macht den Trick. Es ist jedoch nicht perfekt. aber hey:

# Less Colors for Man Pages 
export LESS_TERMCAP_mb=$'\E[01;31m'       # begin blinking 
export LESS_TERMCAP_md=$'\E[01;38;5;74m'  # begin bold 
export LESS_TERMCAP_me=$'\E[0m'           # end mode 
export LESS_TERMCAP_se=$'\E[0m'           # end standout-mode 
export LESS_TERMCAP_so=$'\E[38;5;246m'    # begin standout-mode - info box 
export LESS_TERMCAP_ue=$'\E[0m'           # end underline 
export LESS_TERMCAP_us=$'\E[04;38;5;146m' # begin underline

1
Warum haben Manpages im virtuellen Terminal ein Minimum an Farbe (Cyan für Fettdruck) und im Grafikterminal Schwarzweiß?
Enzotib

3

Muss es im Terminal sein?

Andernfalls können Sie Folgendes verwenden: System-> Hilfe-> Systemdokumentation. Klicken Sie links im daraufhin angezeigten Fenster auf "Manuelle Seiten" (diesen Tipp finden Sie hier ).

Oder Sie können Konqueror verwenden, das die Manpages wie folgt anzeigt: Manpage in Konqueror


1
Beeindruckend. Ich wusste nicht, dass man das kann.
Stann

1
Unterstützt ein anderer Browser dies?
udiboy1209

3

Die Antwort Adam Byrtek scheint die Zeilen auf 80 Zeichen zu beschränken und lässt den Text nicht neu fließen, wenn Sie die Größe Ihres Terminals ändern.

Sie können dies beheben, indem Sie MANPAGERstattdessen einstellen . Sie können auch PAGERwie daithib8 einstellen , aber das ist allgemeiner. MANPAGERüberschreibt PAGERden manBefehl.

aus diesem

export MANPAGER="col -b | vim -c 'set ft=man ts=8 nomod nolist nonu' -c 'nnoremap i <nop>' -"

Er hat einige ziemlich gute zusätzliche Optionen wie Einstellen ts(Tabstop), nonu(Nichtnummer) und Aufheben der Zuordnung i(Einfügen). Also werde ich die beiden Lösungen zusammenführen. Außerdem wurden einige Verbesserungen vorgenommen, z. B. die Verwendung des commandBefehls und das Erweitern von Argumenten mit"$@"

Als eine Funktion:

man() {
  MANPAGER="col -b | vim -R -c 'set ft=man ts=8 nomod nolist nonu' -c 'nnoremap i <nop>' -" command man "$@"
}

BEARBEITEN: Scrollen Sie nach unten zu meinem UPDATE , um die Vorteile dieser unordentlichen Form und eine sauberere Möglichkeit zum Schreiben der Funktion mit einigen zusätzlichen Vim-Zuordnungen zu sehen.


Aber all dies zu tun ist ein wirklich großes Durcheinander. Die folgenden Lösungen müssen installiert werden, sind jedoch sauberere Lösungen.

Diese Lösungen haben nicht das Vim: Reading from stdin..., was die obige Lösung hat.

Ich empfehle daithib8 ‚s Antwort , außer Gebrauch MANPAGERstatt , PAGERda diese Frage ist nur über manpages. Und ich würde es auch zu meinem hinzufügen .bash_profileoder .profileso, es wird nicht bei jedem Aufruf von exportiert bash. Sie müssen jedoch installieren most.

# In .profile or .bash_profile
MANPAGER='most'

mosthat keine hjklBewegung wie in vimund less, aber es ist die schnellste.

Ist auch vimpagerziemlich gut. Ich benutze es gerne für riesige Manpages wie man bash. Sie erhalten alle coolen Dinge von vim wie Zeilennummern number, hervorgehobene Suche hlsearchund alle Ihre vim-Plugins.

Wenn Sie YouCompleteMeinstalliert haben vimpager, wird diese Meldung ebenfalls nicht angezeigt:

The ycmd server SHUT DOWN (restart with ':YcmRestartServer'). Unexpected exit code 1. Type ':YcmToggleLogs ycmd_54959_stderr_UvwUrj.log' to check the logs.

Ich weiß nicht warum, aber es ist schön, das nicht zu sehen.

# In .profile or .bash_profile
export MANPAGER='vimpager'

Startup kann etwas langsamer sein als mostda vimpagerQuellen Ihr .vimrc, was eine gute Sache sein kann, wenn Sie Ihre vim - Plugins verwenden möchten. So deaktivieren Sie die .vimrcBeschaffung:

# In .profile or .bash_profile
export MANPAGER='vimpager -u NONE'

Sie können auch einen hybriden Ansatz mit Funktionen durchführen:

# Use 'command man' instead of 'man' if you have overridden
# 'man' with a function, like how I did in the "messy" solutions above.

manmost() {
    MANPAGER='most' man "$@"
}

manvim() {
    MANPAGER='vimpager -u NONE' man "$@"
}

manvimrc() {
    MANPAGER='vimpager' man "$@"
}

Jetzt export MANPAGERwird Ihr Standard MANPAGERin Ihrem .bash_profileoder festgelegt .profile, aber Sie können eine dieser Funktionen verwenden, um schnell eine andere zu verwenden MANPAGER.


AKTUALISIEREN

Tatsächlich unterscheidet sich Vimpager ein wenig von Vim. Im normalen Modus wwird beispielsweise zugeordnet bund bzugeordnet & <C-B><SNR>1_L. Aber so sind andere Pager - weniger hat keinen Cursor.

Wenn Sie tatsächlich vim verwenden möchten, mit einem unordentlichen Lösung, fand ich diese . Es unterdrückt das Vim: Reading from stdin...mit einem Hack. Hat aber immer noch die YouCompleteMe-Nachricht. Sie können wahrscheinlich einen anderen -cBefehl festlegen, um YouCompleteMe auszuschalten. Aber ich werde diese Nachricht einfach ignorieren.

manrealvim() {
  MANPAGER='bash -c "vim -MRn -c \"set ft=man nomod nolist nospell nonu\" -c \"nm q :qa!<CR>\" -c \"nm <end> G\" -c \"nm <home> gg\"</dev/tty <(col -b)"' man "$@"
}

In neueren vim-Versionen können Sie diesen Hack vermeiden mit --not-a-term:

Ich habe die Funktion mit Zeilenumbrüchen bereinigt, da dies die Version ist, die ich verwende.

manvim() {
  MANPAGER='col -b | '\
'vim -MR -c "set ft=man ts=8 nomod nolist nospell nonu" '\
'-c "set colorcolumn= hlsearch incsearch" '\
'-c "nun <buffer> q" '\
'-c "nn q :qa!<CR>" '\
'-c "nn <end> G" '\
'-c "nn <home> gg" '\
'- --not-a-term' man "$@"
}

Oder Sie können einfach neovim> v0.2.2 verwenden :

# not sure why but the -M flag breaks it but it's not required
# Seems like nvim already sets -M when ft=man
mannvim() {
  MANPAGER='col -b | '\
'nvim -R -c "set ft=man ts=8 nomod nolist nospell nonu" '\
'-c "nun <buffer> q" '\
'-c "nn q :qa!<CR>" '\
'-c "nn <end> G" '\
'-c "nn <home> gg" '\
'-' man "$@"
}

Möglicherweise möchten Sie die zum Anpassen übergebenen vim-Optionen durchsehen. Ich habe sie in all den Posts durchgesehen, die ich aufgelistet habe, und die ausgewählt, die mir gefallen haben. Oder du kannst mich einfach kopieren.

Sie können auch analysieren, vim --versionum festzustellen, ob der Hack oder verwendet werden soll --not-a-term. Das werde ich hier nicht machen.


MEINE AKTUELLE METHODE

Wenn Sie diese vim-Methode als Standard festlegen möchten, gehen Sie wie MANPAGERfolgt vor:

  1. Fügen Sie diese ausführbaren Skripte in Ihren Pfad ein:

    Es gibt zwei Skripte, da das erste für allgemeines Paging (Ersatz für weniger) und das zweite für Manpaging (Hervorhebung der Manpage-Syntax) vorgesehen ist.

    # Put this in ~/bin/vimrealpager
    # I call it vimrealpager to avoid name clashes with vimpager mentioned above
    # Make sure ~/bin/ is in your path
    
    # ***SCRIPT START***
    
    #!/usr/bin/env sh
    
    col -b |
    vim -MR -c 'set nomod nolist nospell nonu' \
    -c 'set colorcolumn= hlsearch incsearch' \
    -c 'nn q :qa!<CR>' \
    -c 'nn <end> G' \
    -c 'nn <home> gg' \
    "$@" \
    --not-a-term \
    -
    
    # Put this in ~/bin/vimrealmanpager
    # ***SCRIPT START***
    
    #!/usr/bin/env sh
    
    vimrealpager -c 'set ft=man' \
    -c 'nun <buffer> q'
    
  2. In Ihrem ~ / .profile:

    export MANPAGER='vimrealmanpager'
    

Sie könnten auch export -fdie Funktionen ausführen, die ich zuvor gezeigt habe, aber es funktioniert in Bash, aber nicht in der POSIX-Shell, sodass Sie es in .bash_profile anstelle von .profile einfügen müssten.

Ähnliches kann getan werden, nvimaber ich werde es hier nicht hinzufügen, es sei denn, dies wird angefordert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.