Conoce bat en linux, el cat con resaltado de sintaxis
Tags: linux, spanish, tutorial
Published: 2020-12-08 13:52:59

El otro día estaba buscando herramientas de resaltado de sintaxis y me topé con una herramienta bastante interesante llamada [bat](https://github.com/sharkdp/bat) (Sí, como murciélago en inglés), es básicamente el _cat_ de linux, pero con colores y otras funciones bastante interesantes. Y, como cereza del pastel, **está programado en Rust.** En esta entrada te explico de forma corta como funciona y que es lo que puede hacer por ti.

## Instalar bat desde los repositorios en linux

Puedes instalarlo directo desde los repositorios en las versiones más nuevas de Debian o sistemas derivados (Ubuntu).

```bash
sudo apt install bat
```

Como mi versión de Debian no es la más reciente tuve que instalarlo desde [su version de paquete de software con terminacion .deb](https://github.com/sharkdp/bat/releases). Recuerda que si tienes problemas con los comandos de GNU/Linux [entra a leer mis entradas](https://coffeebytes.dev/comandos-de-gnu-linux-que-deberias-conocer/) donde hablo sobre los comandos básicos.

```bash
wget https://github.com/sharkdp/bat/releases/download/v0.15.4/bat-musl_0.15.4_amd64.deb
dpkg -i bat-musl_0.15.4_amd64.deb
```

## ¿Para qué sirve bat?

_Bat_ nos va a mostrar el contenido de un archivo, justo como _cat_, pero con la sintaxis resaltada para la mayoría de los lenguajes de programación:

_Cat_, la herramienta predeterminada nos muestra el archivo que le indiquemos pero en un solo color.

```
cat index.js
import React from "react"
import ReactDOM from "react-dom"
import App from "./App"

ReactDOM.render(<App/>, document.getElementById('root'))
```

Si ahora usamos _bat_ veremos la sintaxis del lenguaje resaltada y los números de linea en la salida estándar:

```javascript
bat index.js
//File: index.js
import React from "react"
import ReactDOM from "react-dom"
import App from "./App"

ReactDOM.render(<App/>, document.getElementById('root'))
```

Puede resaltar los tabuladores, los espacios y los saltos de linea usando la opción _\-A_

```css
bat -A index.css
/*index.css*/
body{␊
••margin: 0;␊
••background-color: whitesmoke;␊
••font-family: Lolita;␊
••font-color: #bbb;␊
}␊
␊
.checkBoxes{␊
••font-size: 20px;␊
••padding: 10px;␊
}
```

## Bat tiene muchos temas disponibles

Bat tiene temas para todos los gustos, hippies, sobrios, formales, psicodélicos, etc. Usa _\--list-themes_ para verlos.

```javascript
bat --list-themes
...
Theme: Monokai Extended

  // Output the square of a number.
  fn print_square(num: f64) {
      let result = f64::powf(num, 2.0);
      println!("The square of {:.2} is {:.2}.", num, result);
  }
...
```

Si te gusta un tema en particular puedes usarlo de manera temporal para visualizar un archivo usando la opción _\--theme_

```bash
bat --theme='Monokai Extended' index.css
```

Para cargarlo permanentemente debes agregarlo a tu archivo _.bash\_rc_

```bash
# ~/.bashrc
...
export BAT_THEME="Monokai Extended"
...
```

## Bat viene con un paginador automático

Esto significa que si el archivo es muy grande, no lo mostrará completo, sino que mostrará una parte y podremos ir avanzando por el contenido con las flechas en nuestro teclado. El paginador que usa por defecto es _less_.

```bash
#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file requirements.txt requirements.in
#
amqp==2.2.2
asn1crypto==0.24.0
attrs==17.4.0
Babel==2.5.3
BabelDjango==0.2.2
:
```

## Bat tiene integración con git

Bat se integra con _git_ y te muestra los horribles bugs cambios que has implementado en tu código. Agrega un símbolo + para lineas añadidas y un ~ para lineas modificadas.

```django
{% block content %}
  <header class="navbar" role="navigation">
    ~ <p>Parrafo modificado</p>
    + <p>Parrafo nuevo</p>
  </header>
{% endblock %}
```

¿Qué opinas? ¿Lo usarías? A mi me parece una herramienta bastante útil, sobre todo para entornos donde no se tiene una interfaz gráfica o si eres como yo y no te gusta esperar a que cargue el IDE.

Sígueme en [twitter](https://twitter.com/neon_affogato) publico un tweet cada que tengo una nueva entrada. Además Twitteo frecuentemente información interesante sobre tecnología que puede servirte.