Como destacar a sintaxe via Menos


133

existe uma maneira de sintaxe destacar um arquivo que vejo em Menos?

na verdade, estou usando esse comando para abrir um arquivo xml (e algumas vezes uma série deles)

less htmleditors/htmleditors_config.xml

ou

less [multiple files]

Eu gostaria de ficar em Less (para aprender melhor esse programa e usar meu conhecimento de: n e: p para a navegação seguinte / anterior)

Mas também deseja algum tipo de destaque básico de sintaxe - pelo menos mostre os comentários de maneira diferente. Você conhece alguma maneira de fazer isso?

Respostas:


123

Você pode usar o destaque de fonte do GNU , como mostrado aqui (o caminho pode ser diferente, veja abaixo):

 export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
 export LESS=' -R '

No Debian Stretch e no Fedora 25, os nomes dos pacotes e os caminhos dos scripts diferem

  • Debian:

    sudo apt install libsource-highlight-common source-highlight
    dpkg -L libsource-highlight-common | grep lesspipe
    # /usr/share/source-highlight/src-hilite-lesspipe.sh
    
  • Fedora:

    sudo dnf install source-highlight
    rpm -ql source-highlight | grep lesspipe
    # /usr/bin/source-highlight/src-hilite-lesspipe.sh
    

Eu recupero a seguinte mensagem de erro quando executo less ~/.zshrc. Erro: src-hilite-lesspipe.sh: line 9: source-highlight: command not found. Eu corro isso no MacOSX.
JJD

2
@JJD Você instalou o destaque da fonte?
Max Nanasy

13
OSX: brew install source-highlight; export LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s". Observe a mudança de caminho.
precisa saber é o seguinte

23
No Debian: sudo apt-get install source-highlight, export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s",export LESS=' -R '
Morgan Courbet

3
pequena ressalva: o destaque da fonte atualmente não suporta remarcações.
21816 dhulihan

97

O melhor das duas respostas anteriores: é possível chamar o editor padrão do sistema a partir de menos, pressionando v.


3
Uau! Isso é incrivelmente útil!
dancek

13
Maldições que abriram o Nano na minha caixa do Ubuntu!
jamesc

5
Em seguida, defina $ EDITOR ou $ VISUAL como vim (ou emacs, ou gedit, ou joe, ou ed ou mined, ou…).
Daniel H

@jamesc FYI, você pode ativar o destaque de sintaxe no Nano, aqui está como.
Captain Man

@CaptainMan Nope nope nope! Eu mudo o padrão de volta para o vim, como Daniel H disse! : D
jamesc

33
pygmentize somefile.ex | less -R

ou

function cless () {
    pygmentize -f terminal "$1" | less -R
}

Pycementize vem como parte do marcador de sintaxe Pygments Python .


3
pygmentizetambém trabalha com o LESSOPENmaterial mencionado em outras respostas aqui.
5194 Nathan

2
Para chegar pygmentize, você precisa de Python e então você pode instalar pygmentizecom pip install pygments.
wkschwartz

3
Para chegar lessa usar pygmentizepara uso destaque de sintaxe: which pygmentize 2> /dev/null >&2 && export LESSOPEN="| pygmentize -g -f terminal256 %s". -gpara fazê-lo funcionar com tubos ( less <(diff -u file1 files)). Está disponível no community/pygmentizepacote para arch linuxe python-pygmentspara debian.
X-yuri

Eu gosto da saída de pygmentize, mas achei muito lento. Eu vim com esta resposta que é mais rápida e bonita de 256 cores.
Tom Hale

16

Eu acho que você deveria usar um editor de texto. Eu também gosto do vim. Isso lhe dará MUITO poder ao visualizar arquivos e, quando você quiser editá-los, já saberá o básico.

Aqui estão algumas das vantagens de usar um editor de texto (especificamente o vim):

  • realce de sintaxe
  • poderosos comandos de movimento
  • encontrar
  • pule para um local específico em um arquivo (chamado de marca)
  • dobrável (útil quando você só quer ver as funções stubbs)

Para abrir seu arquivo no modo somente leitura, use este:

vim -R <file name>

Aqui está um guia de navegação básico:

j - move down one line
k - move up one line
h - left one char
l -right one char

ctrl-f - forward one page
ctrl-b - back one page

/<something> - search for something
n - next of whatever you searched for
N - next (search backwards) of whatever you searched for

:q - quit
:q! - quit without saving
:w - save

Aqui está um link para mais informações:

http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html

Só para recapitular, se você usará o unix vim é bastante fundamental. Ouvi dizer que aprender vim é como aprender a digitar. É a próxima ferramenta mais útil que você pode aprender para programação.

(Apenas para evitar guerras com editores, você também pode procurar no emacs ou outro editor, no entanto, eu pessoalmente prefiro o vim)


1
Eu segundo isso. O Vim inicia tão rápido quanto menos, e muitos dos atalhos do teclado (por exemplo, pesquisa, próxima página, página anterior) são idênticos.
Jeremy W. Sherman

10
Apenas para sua informação, em muitos sistemas, viewé um apelido para vim -R.
Andrew Ferrier

15

Como outros já disseram, você pode usar o poder do vim. Porém, o mais importante é que você pode fazer isso sem aprender a usar o vi / vim.

O Vim vem com um less.vimscript que funciona muito bem como substituto de menos, com destaque para a sintaxe em cores. Ele usa lesscombinações de teclas (basta pressionar 'q' para sair).

Tinha alguns problemas, então eu melhorei . Aqui está uma captura de tela do meu blog (arquivada em 2013-04-09; original lança 503):

captura de tela de https://github.com/huyz/less.vim


2
Impressionante! Mas como não consegui encontrar o script imediatamente, gostaria de compartilhar o comando para localizá-lo: find /usr/share/vim -name 'less.sh'que é extraído desta lista: gist.github.com/chauncey-garrett/9773770
nuala

Adicionando ao comentário de @ yoshi, para adicionar rapidamente um vimlesscomando (seguindo a nomenclatura de vimdiff), faça:ln -s $(find /usr/share/vim -name 'less.sh') /usr/local/bin/vimless
waldyrious

O link é 404!
acgtyrant

@acgtyrant Deve ser corrigido agora; felizmente, o Internet Archive possui.
bb010g 19/04

10

Eu também estava procurando por isso e encontrei outra solução usando o Vim: http://ubuntu-tutorials.com/2008/07/14/use-vim-as-a-syntax-highlighting-pager/

A postagem é bastante antiga; agora, nas distros mais recentes, o vim 7.2 é enviado e o .bashrc exibirá: alias vless = 'vim -u /usr/share/vim/vim72/macros/less.vim'


1
MacVim vem com um shell script que você pode usar diretamente, localizado em: /Applications/MacVim.app/Contents/Resources/vim/runtime/macros/less.sh
Nick

1
Esse recurso está documentado no próprio Vim em:help less
joeytwiddle

8

Estou feliz em anunciar um novo pacote, o e2ansi , que fornece suporte à sintaxe para destacar pagers como moree less.

O pacote usa a mãe de todos os editores de texto, o Emacs , para executar o realce da sintaxe. Como um bônus adicional, todas as outras conversões normalmente executadas pelo Emacs - como descompactar arquivos - também são executadas.

Exemplo

A seguir, o resultado da exibição de um arquivo usando lesse e2ansi:

Exemplo

Configuração

O pacote fornece uma ferramenta de linha de comando e2ansi-catque inicia o Emacs no modo em lote, abre arquivos, destaca a sintaxe e renderiza o resultado usando sequências ANSI.

Você pode integrar isso lessconfigurando as seguintes variáveis ​​como, por exemplo (a localização do seu arquivo init pode variar):

export "LESSOPEN=||-/usr/local/emacs --batch -Q -l ~/.emacs -l bin/e2ansi-cat %s"
export "LESS=-r"
alias "more=less -X -E"

Na configuração acima, lessrestaura o conteúdo original da janela do terminal e moresimplesmente gera um novo conteúdo após o prompt.

Nota: Se você usar uma versão antiga less, ela poderá não suportar ||a -sintaxe ou , nesse caso, poderá ser necessário usá-la simplesmente LESSOPEN=|/usr/local/emacs ....

Usando lessem tubos

O caractere "-" LESSOPENindica que o filtro de entrada também deve ser usado ao inserir texto no canal less. Nesse caso, o Emacs pode confiar apenas no próprio texto (e não no nome de um arquivo). Felizmente, o Emacs fornece um sistema para isso. Além disso, o arquivo de arquivo fornecido e2ansi-magic.elconfigura tipos de arquivo adicionais. Por exemplo:

Exemplo de tubulação

Por que usar o Emacs?

  • O Emacs suporta praticamente todas as linguagens de programação e formatos de texto estruturado. Na maioria dos casos, o suporte de destaque de sintaxe é excelente.
  • Você pode adicionar facilmente suporte para mais idiomas e formatos ou modificar pacotes existentes para atender às suas necessidades.
  • O Emacs suporta temas de cores. Ao usar e2ansi, as cores do tema são preservadas ao exibir um arquivo less. Você pode escolher um tema de cores adequado de várias fontes ou criar seu próprio.
  • Se você usar o Emacs como seu editor de escolha, obterá o mesmo destaque no editor ao exibir um arquivo usando less(menos limitações no formato de sequência ANSI e na janela do terminal).
  • lessaproveitará os recursos do Emacs que executam a conversão automática, por exemplo, descompactando arquivos. De fato, você pode ensinar o Emacs a realizar qualquer tipo de conversão, como converter automaticamente um arquivo binário em formato legível por humanos, usando uma ferramenta externa.
  • Você pode visualizar arquivos localizados em outras máquinas usando a sintaxe do Emacs para acesso remoto como /USER@HOST:FILENAME.

Links Úteis

  • e2ansié distribuído no Melpa e pode ser instalado usando o sistema de pacotes Emacs padrão
  • e2ansiestá hospedado no GitHub
  • A e2ansipágina no Emacs Wiki
  • A casa de less.

Notas do sistema operacional

  • No MS Windows, o console não suporta nativamente sequências ANSI. Felizmente, o lessaplicativo é capaz de renderizá-los. Não conheço nenhuma distribuição binária contemporânea do lessMS Windows e os arquivos de compilação fornecidos são difíceis de usar. Felizmente, é fácil criar lessusando o CMake , consulte este texto para obter detalhes.

  • OS X distribui uma versão antiga do less. Felizmente, é fácil criar uma versão moderna diretamente da fonte.


Para o OS X, eu recomendo usar o gerenciador de pacotes brew [ brew.sh/] com brew dupes [ github.com/Homebrew/homebrew-dupes] para instalar versões atualizadas de coisas como less.
precisa saber é

"powered by emacs" - executando VM inteira apenas para ver um arquivo? ;-) e +1
Alois Mahdal

6

Se você tiver o GNU Source-realce instalado, poderá usar o seguinte comando para destacar a sintaxe de um único arquivo:

$ src-hilite-lesspipe.sh yourfile.xml | less -R

src-hilite-lesspipe.shTambém pode receber entrada através de um tubo?
waldyrious

2

source-highlighttem um .shscript localizado em /usr/share/source-highlight/*.sh. Eu criei um link simbólico para ele com o nome hcatno /usr/bin.

Mostra a saída destacada no terminal (console) - hcaté destacada cat.

Como:

[me@this]<bash><~> 43 
21:23 Fri Apr 19 > sudo apt-get install source-highlight

[me@this]<bash><~> 28 
21:03 Fri Apr 19 > ll /usr/share/source-highlight/*.sh
-rwxr-xr-x 1 root root 432 May  1  2012 /usr/share/source-highlight/src-hilite-lesspipe.sh*

[me@this]<bash><~> 29 
21:04 Fri Apr 19 > sudo su
root@this:/home/me# cd /usr/bin/
root@this:/usr/bin# ln -s /usr/share/source-highlight/src-hilite-lesspipe.sh hcat

[me@this]<bash><~> 36 
21:07 Fri Apr 19 > hcat test.xml

2

Usando o OS X 10.9 (Maverick), isso funcionaria:

  • fonte de instalação do brew-destaque (assumindo que o brew está instalado - http://brew.sh )
  • sudo nano /etc/launchd.conf

    setenv LESSOPEN="| /usr/local/bin/src-hilite-lesspipe.sh %s"     
    setenv LESS=' -R '
    

    (Adicione ao /etc/launchd.conf)

  • reiniciar


0

No mac, você pode apenas digitar view filename, faz algo semelhante como menos.


1
Com o OSX, view filenameapenas inicia vimpor padrão - atalhos de teclado ligeiramente diferentes para less(consulte outras respostas a esta pergunta para obter mais detalhes).
precisa saber é

0

Após instalar o fonte-destaque do GNU (pacote dev-util/source-highlightno sabayon / gentoo), configurei esses envs em /etc/bash/bashrc.d/my-less-src-highlight:

#default:    export LESSOPEN="|lesspipe %s"
#don't like: export LESSOPEN="| /usr/bin/src-hilite-lesspipe.sh %s"
#default:    export LESS=" -R -M --shift 5"
export LESSCOLOR=always
export LESSCOLORIZER=/usr/bin/src-hilite-lesspipe.sh

Não gostei de substituir lesspipeporque isso tem outros recursos. A concatenação não funcionou.


0

Se você deseja a mesma sintaxe destacada que usa no Vim , mas, por algum motivo, prefere usar lesscomo pager, pode usar este script: https://github.com/rkitover/vimpager

O uso básico seria:

vimpager file.txt

ou

vimcat file.ext | less -R

Você pode usar -cpara passar comandos extras que não estão no seu .vimrc(por exemplo, selecionando um esquema de cores diferente). O comando completo que eu uso é:

vimcat -c 'set cmdheight=20' -c 'hi! clear Normal' -o - "$FILENAME" | less -REXS

Cuidado: se o seu Vim solicitar que você pressione Enter quando iniciar, você não verá o prompt, mas nada acontecerá até você pressionar Enter! O cmdheighttruque acima pode ajudar a atenuar isso.


0

Eu descobri highlightquais:

  • Suporta vários esquemas de cores e 256 cores
  • Funciona em STDIN (ao contrário source-highlight)
  • É muito mais rápido que pygmentize

Captura de tela

Aqui está um script que chamo highlight-less-wrapperque inclui .bashrcinstruções sobre como configurar lesspara usá-lo automaticamente.

#!/bin/bash

# Have highlight read from STDIN if '-' is given as filename

# Setup - Add to .bashrc:
# LESSOPEN='|-highlight-less-wrapper "%s"'
# export LESS=-FMRXis

# Usage:
# $ less file
# OR
# $ pipeline | less

warn () { printf "%s: %s\n" "$(basename "$0")" "$*" 1>&2; }
die () { warn "$@"; exit 1; }

# Argument checking
case $# in
    0)
        # Allow `exec $0` for less setup
        echo "LESSOPEN='|-$(readlink -f "$0") "'"%s"'\'
        exit 255 ;;
    1)
        # Only one argument is expected.
        # less will invoke multiple times given multiple files.
        file=$1
        if [[ $file != - && ! -r $file ]]; then  # less passes '-' for STDIN
            die "Cannot open $file for reading"
        fi ;;
    *)
        die "Expected only one argument" ;;
esac

# Run highlight
# highlight will read from STDIN when given a null filename
run_highlight () {
    highlight --force -O truecolor --style aiseered "$1"
}

if [[ $file == - ]]; then  # Run on stdin
    run_highlight ""
else
    run_highlight "$file"
fi

"Como o Github agora faz parte da Mordor Corp, o destaque foi dado pelo repositório do Git" Estava interessado, mas vamos lá, não é mais a década de 90 que os desenvolvedores precisam crescer.
Urda

0

Eu tinha a mesma pergunta e consegui ouvir, ler todas as respostas e a seguir, o que finalmente fiz para destacar a sintaxe toda vez que uso lessou most:

sudo apt install source-highlight

Então eu criei um alias para my lesse most(eu uso o ZSH, mas você pode adicionar aliases para o seu .bashrcarquivo se você usar o bash):

vim ~/.zshrc

( Para aqueles que pode ficar preso no vim: pressionar ipara ir para modo de edição, quando tiver terminado de imprensa Esc, em seguida, :em seguida, xe, finalmente, Enterpara salvar as alterações )

E cole as seguintes linhas para distribuições baseadas no debian (como Debian, Ubuntu, Mint, etc.):

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(dpkg -L libsource-highlight-common | grep lesspipe) "$1" | most };AliasFuncMost'

ou para distribuições RPM (Redhat, Fedora, Centos):

alias most='AliasFuncLess() { unset -f AliasFuncLess; $(rpm -ql source-highlight | grep lesspipe) "$1" | less -R };AliasFuncLess'
alias most='AliasFuncMost() { unset -f AliasFuncMost; $(rpm -ql source-highlight | grep lesspipe) "$1" | most };AliasFuncMost'

Lembre - se de fechar o terminal e abri-lo novamente para garantir que o alias seja criado.

Agora você pode apreciar as cores:

most yourFile.xml
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.