Códigos de escape ANSI
Un código de escape ANSI es una secuencia de caracteres que un programa imprime para indicar a la terminal que haga algo más que mostrar esos caracteres: que coloree las próximas palabras de rojo, que mueva el cursor dos líneas hacia arriba, que limpie la pantalla. La terminal consume la secuencia y la ejecuta; por eso un archivo de log lleno de ellos parece ruido cuando lo abres en un editor.
Cada código comienza con el byte de escape y, con una excepción, con un paréntesis de apertura. La columna de parámetros muestra la parte entre el paréntesis y la letra final, que es lo que ensamblas en el código; la primera columna muestra la secuencia completa tal como la escribirías en un shell.
El soporte varía según la terminal, y esta página lo indica donde importa. Los ocho colores básicos y la negrita funcionan en todas partes; el parpadeo, el doble subrayado y true color no.
Anatomía de una secuencia
6Cada código en esta página tiene la misma forma: byte de escape, paréntesis de apertura, parámetros y una letra que dice qué hacer con ellos.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e | 0x1B | El byte de escape que inicia cada secuenciaSe escribe \e en un shell, \033 en C, \x1b en la mayoría de lenguajes y \u001b en JSON y Java. |
| \e[ | CSI | Introductor de secuencia de control — abre un comando parametrizado |
| \e[<n>m | m | Selección de representación gráfica: todo color y estilo termina en m |
| \e[1;4;31m | 1;4;31 | Varios parámetros a la vez, separados por punto y comaNegrita, subrayado y rojo en una secuencia — más corto que tres separadas e idéntico en efecto. |
| \e[0m | 0 | Restablece cada atributo a los valores predeterminados de la terminalEmite esto al final de la salida coloreada. Un programa que termina sin hacerlo deja el prompt del usuario coloreado. |
| \e]8;;URL\e\\text\e]8;;\e\\ | OSC 8 | Un hipervínculo cliqueable, en terminales que lo soportanUna secuencia OSC en lugar de CSI, y terminada por ESC \ en lugar de una letra. |
Atributos de texto
14El soporte es desigual por debajo de los primeros cinco. El parpadeo se ignora casi en todas partes, y algunas terminales representan dim e italic idénticamente.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e[1m | 1 | Negrita o brillo |
| \e[2m | 2 | Atenuado |
| \e[3m | 3 | Cursiva |
| \e[4m | 4 | Subrayado |
| \e[5m | 5 | ParpadeoAmpliamente ignorado; la mayoría de terminales modernas lo representan como texto simple. |
| \e[7m | 7 | Inverso: intercambia primer plano y fondo |
| \e[8m | 8 | Oculto: el texto existe pero no se dibuja |
| \e[9m | 9 | Tachado |
| \e[21m | 21 | Doble subrayadoAlgunas terminales leen 21 como "desactivar negrita". |
| \e[22m | 22 | Intensidad normal: cancela negrita y atenuado |
| \e[23m | 23 | Cancela cursiva |
| \e[24m | 24 | Cancela subrayado |
| \e[27m | 27 | Cancela inverso |
| \e[29m | 29 | Cancela tachado |
Color del texto
17Los ocho colores estándar y sus contrapartes brillantes. Lo que el lector realmente ve es la interpretación de su tema de terminal — "rojo" es una posición en una paleta, no un valor hexadecimal.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e[30m | 30 | Texto negro |
| \e[31m | 31 | Texto rojo |
| \e[32m | 32 | Texto verde |
| \e[33m | 33 | Texto amarillo |
| \e[34m | 34 | Texto azul |
| \e[35m | 35 | Texto magenta |
| \e[36m | 36 | Texto cian |
| \e[37m | 37 | Texto blanco |
| \e[39m | 39 | Volviendo al color de texto predeterminado |
| \e[90m | 90 | Texto negro brillante |
| \e[91m | 91 | Texto rojo brillante |
| \e[92m | 92 | Texto verde brillante |
| \e[93m | 93 | Texto amarillo brillante |
| \e[94m | 94 | Texto azul brillante |
| \e[95m | 95 | Texto magenta brillante |
| \e[96m | 96 | Texto cian brillante |
| \e[97m | 97 | Texto blanco brillante |
Color de fondo
17La misma paleta desplazada diez posiciones. Un código de fondo establece la celda detrás del texto y permanece activo hasta que se restablece.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e[40m | 40 | Fondo negro |
| \e[41m | 41 | Fondo rojo |
| \e[42m | 42 | Fondo verde |
| \e[43m | 43 | Fondo amarillo |
| \e[44m | 44 | Fondo azul |
| \e[45m | 45 | Fondo magenta |
| \e[46m | 46 | Fondo cian |
| \e[47m | 47 | Fondo blanco |
| \e[49m | 49 | Volviendo al fondo predeterminado |
| \e[100m | 100 | Fondo negro brillante |
| \e[101m | 101 | Fondo rojo brillante |
| \e[102m | 102 | Fondo verde brillante |
| \e[103m | 103 | Fondo amarillo brillante |
| \e[104m | 104 | Fondo azul brillante |
| \e[105m | 105 | Fondo magenta brillante |
| \e[106m | 106 | Fondo cian brillante |
| \e[107m | 107 | Fondo blanco brillante |
256 colores y true color
4Dos extensiones del mismo mecanismo SGR. Ambas son ampliamente pero no universalmente soportadas; una terminal que no las entiende generalmente ignora la secuencia en lugar de imprimirla.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e[38;5;<n>m | 38;5;n | Texto en color de paleta n, 0–2550–15 son los dieciséis anteriores, 16–231 un cubo de color 6×6×6, 232–255 una rampa en escala de grises. |
| \e[48;5;<n>m | 48;5;n | Fondo en color de paleta n, 0–255 |
| \e[38;2;<r>;<g>;<b>m | 38;2;r;g;b | Texto en un color exacto de 24 bits |
| \e[48;2;<r>;<g>;<b>m | 48;2;r;g;b | Fondo en un color exacto de 24 bits |
Movimiento del cursor
11Los movimientos no desplazan ni envuelven: un cursor ya en la parte superior de la pantalla ignora una solicitud de ir hacia arriba.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e[<n>A | A | Arriba n filas |
| \e[<n>B | B | Abajo n filas |
| \e[<n>C | C | Derecha n columnas |
| \e[<n>D | D | Izquierda n columnas |
| \e[<n>E | E | Abajo n filas, al inicio de la línea |
| \e[<n>F | F | Arriba n filas, al inicio de la línea |
| \e[<n>G | G | A la columna n de la fila actual |
| \e[<row>;<col>H | H | A una fila y columna absoluta, contando desde 1 |
| \e[s | s | Recuerda la posición del cursor |
| \e[u | u | Vuelve a la posición recordada |
| \e[6n | 6n | Pregunta a la terminal dónde está el cursorLa terminal responde en entrada estándar como \e[<fila>;<col>R — la única secuencia aquí que produce una respuesta. |
Borrado
7El borrado escribe espacios con el color de fondo actual; no mueve el cursor.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e[0J | 0J | Borra desde el cursor hasta el final de la pantalla |
| \e[1J | 1J | Borra desde el inicio de la pantalla hasta el cursor |
| \e[2J | 2J | Borra toda la pantallaEl cursor permanece donde estaba, por eso esto generalmente se empareja con \e[H. |
| \e[3J | 3J | Borra también el buffer de retroceso |
| \e[0K | 0K | Borra desde el cursor hasta el final de la línea |
| \e[1K | 1K | Borra desde el inicio de la línea hasta el cursor |
| \e[2K | 2K | Borra toda la línea\r\e[2K es la forma habitual de redibujar una línea de progreso en su lugar. |
Modos de terminal
8Modos privados, marcados con un signo de pregunta. Cambian cómo se comporta la terminal en lugar de cómo se ve un texto, y cada uno debe reiniciarse antes de que el programa termine.
| Secuencia | Parámetro | Efecto |
|---|---|---|
| \e[?25l | ?25l | Oculta el cursor |
| \e[?25h | ?25h | Muestra el cursor |
| \e[?1049h | ?1049h | Cambia a la pantalla alternativaLo que usa un programa de pantalla completa para que el historial del shell sobreviva debajo. |
| \e[?1049l | ?1049l | Cambia de nuevo a la pantalla principal |
| \e[?7h | ?7h | Envuelve líneas largas en el borde derecho |
| \e[?7l | ?7l | Deja que las líneas largas se desborden por el borde derecho |
| \e[?2004h | ?2004h | Activa el pegado con paréntesisEl texto pegado llega envuelto en \e[200~ y \e[201~, para que un shell distinga escribir de pegar. |
| \e[?2004l | ?2004l | Desactiva el pegado con paréntesis |