O `cat` pode mostrar arquivos usando marcação de código em cores?

45

Às vezes, quero rapidamente exibir o conteúdo de um arquivo na linha de comando. Para isso, é claro que uso cat, mas geralmente são arquivos de origem em Python , Java ou HTML simples . Para esses arquivos, seria útil se catpudesse dar alguma marcação de cores aos arquivos, para facilitar a leitura.

Pode catfazer uma coisa dessas?

kramer65
fonte
Isso já pode ter uma resposta aqui #
Wilf
ha @wilf Encontrei o mesmo código com o google: D Também vale a pena observar este tópico no SO: superuser.com/questions/84426/…
Rinzwind 15/14
@Rinzwind - Eu procurei stackoverflow, como foi obrigado a vir para cima ;-)
Wilf
Esta pergunta me lembra de cat -vconsiderado prejudicial .
Snowball

Respostas:

48

catnão é capaz de fazer isso. No entanto, talvez os pigmentos possam ajudá-lo lá. É um script python e pode ser instalado via apt-get

sudo apt-get install python-pygments

ou facilmente baixado e instalado via easy_install.

Ele suporta várias linguagens de código-fonte e também linguagens de marcação

É usado por

pygmentize -g <filename>
txwikinger
fonte
5
Abrir arquivo como pygmentize -g <filename>, o -gswitch é importante para manipular arquivos sem lexer. por exemplo, se você tentar /etc/fstababrir sem -gele falhará.
souravc
Thanks @souravc Adicionou-o à resposta. Curiosamente, esse argumento não parece ser mencionado na página de manual ou na página de ajuda
#
2
Bem, eu brinquei muito com isso. você pode encontrá-lo, tente pygmentize --help Se -gfor aprovado, tente adivinhar o lexer a partir do conteúdo do arquivo ou passe como texto sem formatação se isso falhar (isso pode funcionar para o stdin).
souravc 15/01/14
4
Este é o melhor, então, aliás, gato para pytogizar -g e você é de ouro. No peixe é simples como funced cat... type pygmentize -g $argv... save..funcsave cat.
Elias Lynn
no meu bashrceu adicionei: command -v pygmentize >/dev/null 2>&1 && alias cat='pygmentize -g'
Antonios Hadjigeorgalis 29/11
19

Não de catsi mesmo, mas você pode usar algo como highlite fonte ou supercat ou destaque

Destaque da fonte

Este programa, dado um arquivo de origem, produz um documento com destaque de sintaxe. Ele também fornece uma biblioteca de realces em C ++ (nova) (desde a versão 3.0).

O destaque da fonte lê as especificações do idioma de origem dinamicamente, portanto, pode ser facilmente estendido (sem recompilar as fontes) para lidar com novos idiomas. Ele também lê especificações de formato de saída dinamicamente e, portanto, pode ser facilmente estendido (sem recompilar as fontes) para lidar com novos formatos de saída. A sintaxe para essas especificações é bastante fácil (consulte o manual).

O manual sobre instalação:

Veja o arquivo INSTALL para instruções detalhadas de construção e instalação; de qualquer maneira, se você está acostumado a compilar o software Linux que acompanha as fontes, basta seguir o procedimento usual, ou seja, descompactar o arquivo baixado em um diretório e depois:

 cd <source code main directory>
 ./configure
 make
 make install

Supercat

Esta é a página inicial do Supercat. Supercat é um programa que coloriza o texto com base na correspondência de expressões regulares / strings / caracteres. Supercat suporta saída html, bem como texto ASCII padrão. Ao contrário de alguns programas de coloração de texto existentes, o Supercat não exige que você seja um programador para criar regras de coloração.

Se você escreveu um arquivo de configuração supercat para um tipo de arquivo padrão, não hesite em entrar em contato comigo em "bug-spc (at) nosredna (dot) net") para possível inclusão na distribuição supercat.

Ou com uma função ( fonte ):

#!/bin/bash#!/bin/bash
if [ ! -t 0 ];then
        file=/dev/stdin
elif [ -f $1 ];then
        file=$1
else
        echo "Usage: $0 code.c"
        echo "or e.g. head code.c|$0"
        exit 1
fi
pygmentize -f terminal -g $file

Requer: Pigmentos ( sudo apt-get install python-pygments python3-pygments) Adicione-o como uma função para bash .funções e dê um nome como color ()

Rinzwind
fonte
14

A partir desta resposta aqui , você pode usar os python-pygmentspacotes para destacar coisas. Primeiro faça:

sudo apt-get install python-pygments python3-pygments

então:

pygmentize -g FILENAME

então tente:

insira a descrição da imagem aqui

Você também pode defini-lo como um alias, como na resposta que eu vinculei - basicamente, execute o seguinte:

echo "alias catc='pygmentize -g'" >> ~/.bash_aliases 
chmod +x ~/.bash_aliases

Feche o terminal, abra-o novamente e o catccomando agora deverá funcionar - se não funcionar, verifique se essas linhas estão no .bashrcarquivo e não são comentadas:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

Outra coisa seria apenas usar nano:

nano testfile

insira a descrição da imagem aqui

Wilf
fonte
6

man view ou man vim

Uso básico: view <filename>

Sair: :q<Return>(adicione um <Esc>primeiro se estiver usando vim) ou ZZ(z maiúsculo duas vezes).

O editor de texto do programador já vimtem tudo o que você precisa e provavelmente já faz parte do seu sistema.

vimtem um modo somente leitura ativado com viewou vim -R. Se tudo o que você deseja fazer é exibir o arquivo marcado, deve ser o suficiente.

Simples de usar, navegável, disponível em qualquer lugar. Não há necessidade de mexer com a instalação de novo software ou a escrita de scripts bash.

um ben diferente
fonte
Eu sei. O fato é que abrir e fechar o VIM não é rápido. Quero visualizar instantaneamente um arquivo e continuar na linha de comando. Foi por isso que achei o pitonismo tão bom. Resultado imediato, não quiting um programa ou qualquer coisa .. :)
kramer65
1
@ kramer65 OK, é claro que é a sua preferência, mas você não precisa "abrir" vimou viewapenas fornecer o arquivo: view file.pyentão não há diferença cat. Claro que você precisa fechá-lo, mas realmente, :q<Return>ou ZZnão são tarefas difíceis.
um ben diferente
O principal problema é que o vi / vim / view não grava no stdout, portanto, não posso escrever um comando facilmente enquanto olho para a sintaxe destacada na saída acima.
21818 Jack_Hu
4

Pode-se verificar ccat .

Ele adiciona destaque de sintaxe aos arquivos de saída.

Alan Dong
fonte
3

catnão pode produzir sintaxe destacando apenas. Ainda assim, você pode fazer isso da seguinte maneira, usando python-pygments. Primeiro instale-o no terminal como,

sudo apt-get install python-pygments

Agora copie a função abaixo ~/.bashrc. Isso lhe dará o que você deseja, além disso, preservará as propriedades,cat caso contrário não há sentido em usarcat

catc(){
    cat "$@" > /tmp/.tmp
    pygmentize -g /tmp/.tmp
    rm /tmp/.tmp
}

Fonte ~/.bashrccomo,

. ~/.bashrc

Dá saída colorida,

catc <filename>

Concatenará com a cor também,

catc <file1> <file2> ... <filen>
souravc
fonte
Existe uma maneira de ativar a rolagem com as setas para cima e para baixo ao usar? pygmentize? Estou abrindo-o usando um comando do formulário xterm -e "pygmentize -g <filename>" e estou descobrindo que a única maneira de rolar é usar a barra de rolagem. Tentei canalizar a saída, lessmas isso resultou em saída de lixo.
Leo Simon
Sim, você pode usar pygmentizecom menos. Crie uma função bash da lesscseguinte maneira:lessc () { pygmentize -gf terminal "$1" | less -R }
souravc
2

Bat - Um clone de gato com asas

Você também pode verificar batquais possuem os seguintes recursos:

  • Realce de sintaxe
  • Integração Git
  • Opcionalmente, mostrando caracteres não imprimíveis
  • Paginação automática com less
  • Concatenação de arquivo como um substituto para catquando redirecionado

 Pré-visualização

Captura de tela do morcego mostrando um arquivo colorido

Foto tirada do GitHub oficial

Instalação

Você pode obter o último pacote Debian aqui e instalá-lo com:

sudo dpkg -i bat_0.10.0_amd64.deb

Adaptando o número da versão e a arquitetura.

Andrea Lazzarotto
fonte
0

Outras respostas abrangem por que catnão é possível fazer isso. Embora você possa fazer isso com menos usando lesspipe.sh .

Fuad Saud
fonte
0

Em vez de instalar um pacote de terceiros, você pode simplesmente usar geditpara exibir rapidamente um arquivo com destaque de sintaxe. Por exemplo, copie a barra de endereço acima e cole no seu terminal:

gedit https://askubuntu.com/questions/405960/can-cat-show-files-using-code-markup-in-colors

Você verá esta pergunta em HTML com cores formatadas:

gedit https.png

  • Você pode usar geditteclas de navegação conhecidas
  • Você pode ativar / desativar o quebra de linha
  • Você pode usar plug-ins como eu instalei para uma calha de 80 caracteres e uma visão geral do documento (extrema direita) com o controle deslizante de miniaturas
  • A única ressalva é que você precisa se lembrar de Alt+ F4para fechar rapidamente a janela para simular o catque não exige que as teclas sejam fechadas.
WinEunuuchs2Unix
fonte