web-dev-qa-db-fra.com

Surligner la syntaxe des pages de manuel?

Existe-t-il un moyen de "coloriser" la sortie des pages de manuel? Je veux dire - la sortie de par exemple:

man command_name
7
Stann

J'utilise la fonction Shell suivante pour afficher les pages de manuel dans Vim, qui fournit la mise en évidence de la syntaxe Nice:

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

ajoutez export PAGER=most à . bashrc

5
daithib8

aha. ajouter ceci à ~/.bashrc fait l'affaire. Ce n'est pas parfait cependant. Mais salut:

# 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
4
Stann

Doit-il être dans le terminal?

Sinon, vous pouvez utiliser: Système-> Aide-> Documentation système et sur la gauche de la fenêtre qui apparaît cliquez sur "Pages de manuel" (trouvé cette astuce ici )

Vous pouvez également utiliser Konqueror, qui affiche les pages de manuel comme suit: Man page in Konqueror

3
Bart

La réponse Adam Byrtek semble limiter les lignes à 80 caractères et ne renvoie pas le texte lorsque vous redimensionnez votre terminal.

Vous pouvez résoudre ce problème en définissant MANPAGER à la place. Vous pouvez également définir PAGER comme daithib8 , mais c'est plus général. MANPAGER remplace PAGER pour la commande man.

De ceci

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

Il a quelques très bonnes options supplémentaires telles que le paramétrage de ts (tabstop), nonu (non numéroté) et la suppression du mappage i (insert). Je vais donc fusionner les deux solutions. Des améliorations ont également été apportées, telles que l’utilisation de la commande command et le développement des arguments avec "$@".

En tant que fonction:

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

EDIT: défilez jusqu'à my UPDATE pour voir les avantages de l'utilisation de cette forme malpropre et une manière plus propre d’écrire la fonction avec quelques mappages vim supplémentaires.


Mais faire tout cela est un très gros désastre. Les solutions suivantes nécessitent une installation, mais ce sont des solutions plus propres.

Ces solutions n'ont pas le Vim: Reading from stdin... que la solution ci-dessus a.

Je recommande la réponse de daithib8 sauf d'utiliser MANPAGER au lieu de PAGER car cette question ne concerne que les pages de manuel. Et je voudrais aussi l'ajouter à mon .bash_profile ou .profile afin qu'il ne soit pas exporté à chaque invocation de bash. Vous devrez toutefois installer most.

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

most n'a pas le mouvement hjkl comme dans vim et less, mais c'est le plus rapide.

De plus, vimpager est très bon. J'aime l’utiliser pour d’énormes pages de manuel telles que man bash. Vous obtenez toutes les bonnes choses de vim telles que les numéros de ligne number, la recherche en surbrillance hlsearch et tous vos plugins vim.

Si vous avez YouCompleteMe installé vimpager n'affiche pas non plus ce message:

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

Je ne sais pas pourquoi, mais c'est bien de ne pas voir ça.

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

Le démarrage peut être un peu plus lent que most car vimpager source votre .vimrc, ce qui peut être une bonne chose si vous voulez utiliser vos plugins vim. Pour désactiver le sourçage .vimrc:

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

Vous pouvez également faire une approche hybride avec des fonctions:

# 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 "$@"
}

Alors maintenant, export MANPAGER définira votre valeur par défaut MANPAGER dans votre .bash_profile ou .profile, mais vous pouvez utiliser l’une de ces fonctions pour utiliser rapidement un autre MANPAGER.


UPDATE

En fait, vimpager est un peu différent de vim. Par exemple, en mode normal, w est mappé sur b et b est mappé sur & <C-B><SNR>1_L. Mais c’est la même chose pour les autres pagers: moins n’a pas de curseur.

Si vous souhaitez utiliser vim, avec une solution compliquée, j'ai trouvé ceci . Il supprime le Vim: Reading from stdin... avec un hack. Le message YouCompleteMe reste cependant. Vous pouvez probablement définir une autre commande -c pour désactiver YouCompleteMe. Mais je vais simplement ignorer ce message.

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 "$@"
}

Dans les versions plus récentes de vim , vous pouvez éviter ce hack avec --not-a-term:

J'ai nettoyé la fonction avec les sorties Newline car c'est la version que j'utilise.

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 "$@"
}

Ou vous pouvez simplement utiliser neovim> v0.2.2 :

# 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 "$@"
}

Vous voudrez peut-être parcourir les options vim transmises pour personnalisation. J'ai parcouru tous les articles que j'ai énumérés et choisi ceux qui me plaisaient. Ou vous pouvez simplement me copier.

Vous pouvez également analyser vim --version pour déterminer s'il faut utiliser le hack ou --not-a-term. Je ne ferai pas ça ici.


MA MÉTHODE ACTUELLE

Si vous souhaitez définir cette méthode vim comme valeur par défaut MANPAGER, procédez comme suit:

  1. Ajoutez ces scripts exécutables dans votre chemin:

    Il y a deux scripts car le premier est destiné à la pagination générale (remplacement par moins), tandis que le second est destiné à la gestion de documents (comporte la coloration syntaxique de la page de manuel.

    # 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. Dans votre ~/.profile:

    export MANPAGER='vimrealmanpager'
    

Vous pouvez aussi faire export -f sur les fonctions que j'ai montrées plus tôt, mais cela fonctionne avec bash mais pas avec POSIX Shell, il faudrait donc le mettre dans .bash_profile au lieu de .profile.

Une chose similaire peut être faite pour nvim mais je ne vais pas l'ajouter ici à moins que demandé.

3
dosentmatter