Destacar a sintaxe do manpages?

7

Existe uma maneira de "colorir" a saída de manpages? Quero dizer - a saída de, por exemplo:

man command_name
    
por Stann 18.04.2011 / 04:46

5 respostas

7

Eu uso a seguinte função de shell para visualizar as páginas de manual no Vim, que fornece um bom destaque de sintaxe:

man() {
  /usr/bin/man $* | \
    col -b | \
    vim -R -c 'set ft=man nomod nolist' -
}
    
por Adam Byrtek 18.04.2011 / 10:05
5

adicione export PAGER=most a .bashrc

    
por daithib8 24.05.2011 / 12:11
3

aha. adicionando isso ao ~ / .bashrc faz o truque. Não é perfeito embora. mas ei:

# 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
    
por Stann 18.04.2011 / 05:43
3

Tem que estar no terminal?

Senão você pode usar: System- > Ajuda- > Documentação do sistema e à esquerda da janela que aparece, clique em "Páginas de manual" (achei esta dica aqui )

Ou você pode usar o Konqueror, que mostra as páginas man assim:

    
por Bart 24.05.2011 / 12:55
3

A resposta Adam Byrtek parece limitar as linhas a 80 caracteres e não reflui texto quando você redimensiona seu terminal.

Você pode corrigir isso configurando MANPAGER . Você também pode definir PAGER como daithib8 , mas isso é mais geral. MANPAGER substitui PAGER pelo comando man .

De este

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

Ele tem algumas boas opções extras, como a configuração de ts (tabstop), nonu (nonumber) e unmapping i (insert). Então eu vou mesclar as duas soluções. Também fiz algumas melhorias, como usar o comando command e expandir argumentos com "$@"

Como uma função:

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

EDITAR: navegue até meu UPDATE para ver os benefícios de usar esse formulário bagunçado e uma maneira mais clara de escrever a função com alguns mapeamentos extras do vim.

Mas fazer tudo isso é uma grande bagunça. As soluções a seguir requerem instalação, mas são soluções mais limpas.

Essas soluções não têm o Vim: Reading from stdin... que a solução acima tem.

Eu recomendo a resposta da daithib8 , exceto para usar MANPAGER em vez de PAGER , já que essa questão é apenas sobre manpages. E eu também adicionaria ao meu .bash_profile ou .profile para que ele não seja exportado em cada chamada de bash . Você terá que instalar most embora.

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

most não tem hjkl de movimento como em vim e less , mas é o mais rápido.

Além disso, vimpager é muito bom. Eu gosto de usá-lo para manpages enormes como man bash . Você obtém todas as coisas legais do vim, como números de linha number , pesquisa destacada hlsearch e todos os seus plugins vim.

Se você tiver YouCompleteMe instalado, vimpager também não mostrará esta mensagem:

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

Não sei porquê, mas é bom não ver isso.

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

A inicialização pode ser um pouco mais lenta que most porque vimpager origina seu .vimrc , o que pode ser uma coisa boa, se você quiser usar seus plugins vim. Para desativar .vimrc sourcing:

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

Você também pode fazer uma abordagem híbrida com funções:

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

Agora, export MANPAGER definirá seu MANPAGER padrão em .bash_profile ou .profile , mas você pode usar qualquer uma dessas funções para usar rapidamente outro MANPAGER .

UPDATE

Na verdade, o vimpager é um pouco diferente do vim real. Por exemplo, no modo normal, w é mapeado para b e b é mapeado para & <C-B><SNR>1_L . Mas é assim que outros pagers são - menos não tem um cursor.

Se você quiser usar o vim real, com uma solução confusa, eu encontrei isto . Suprime o Vim: Reading from stdin... com um hack. Ainda tem a mensagem YouCompleteMe embora. Você provavelmente pode definir outro comando -c para desativar YouCompleteMe. Mas vou ignorar essa mensagem.

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

Nas versões mais recentes do vim , você pode evitar esse hack com --not-a-term :

Limpei a função com escapes de nova linha, porque esta é a versão que estou usando.

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 você pode usar apenas 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 "$@"
}

Você pode querer examinar as opções do vim passadas para personalizar. Eu olhei através deles de todas as mensagens que listei e escolhi as que eu gostava. Ou você pode simplesmente me copiar.

Você também pode analisar vim --version para determinar se deve usar o hack ou --not-a-term . Eu não farei isso aqui.

MEU MÉTODO ATUAL

Se você quiser definir esse método vim como seu padrão MANPAGER , faça o seguinte:

  1. Adicione esses scripts executáveis ao seu caminho:

    Existem dois scripts porque o primeiro é para paginação geral (substituição por menos), enquanto o segundo é para manpaging (tem destaque de sintaxe de manpage.

    # 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. No seu ~ / .profile:

    export MANPAGER='vimrealmanpager'
    

Você também pode fazer export -f nas funções que mostrei anteriormente, mas ele funciona no bash, mas não no shell POSIX, então você teria que colocá-lo em .bash_profile ao invés de .profile.

Uma coisa semelhante pode ser feita para nvim , mas não vou adicioná-lo aqui, a menos que seja solicitado.

    
por dosentmatter 17.12.2017 / 00:39

Tags