Por qué es complejo ingresar texto en la terminal
- Cuando en Mastodon se preguntó qué era lo que más confundía a la gente sobre trabajar en la terminal, destacó “editar un comando que ya escribieron”
- Quiero compartir por qué es difícil ingresar texto en la terminal y algunos consejos útiles
Falta de consistencia entre programas
- Distintos programas no manejan la entrada de texto de forma consistente
- Algunos programas (
cat, nc, git commit --interactive, etc.) no soportan las teclas de flecha en absoluto
- Muchos programas (
irb, python3, etc.) usan la biblioteca readline para ofrecer funciones básicas
- Algunos programas solo soportan funciones básicas
- Algunos programas tienen un sistema de entrada completamente personalizado
Modo 1: estado básico
- El estado básico en el que un programa simplemente acepta entrada de texto
- Ofrece funciones básicas como ingresar texto, retroceso,
Ctrl+W, Ctrl+U, etc.
- Puedes ver todos los códigos Ctrl soportados con el comando
stty -a
Modo 2: herramientas que usan readline
readline es una biblioteca de GNU que hace más cómoda la entrada de texto
- Ofrece atajos útiles como
Ctrl+E, Ctrl+A, Ctrl+left/right arrow, Ctrl+R, etc.
- Muchos programas como
bash, psql, irb, python3 y otros usan readline
Consejo: usar readline con rlwrap
- Con
rlwrap, incluso los programas que no tienen soporte para readline pueden aprovechar sus funciones
Por qué una herramienta no usa readline
- Porque el programa es muy simple, por temas de licencia o porque tiene poca interacción, entre otros motivos
Cómo comprobar si usa readline
- Si al presionar
Ctrl+R aparece reverse-i-search, es muy probable que esté usando readline
Origen de las combinaciones de teclas de readline
- Las combinaciones de teclas de
readline provienen de Emacs
Modo 3: otras bibliotecas de entrada (libedit, etc.)
- El
/usr/bin/python3 de Mac usa libedit, por lo que solo soporta parte de las funciones de readline
Modo 4: sistema de entrada personalizado
- Editores de texto como
nano, micro, vim, emacs y shells como fish tienen sistemas de entrada personalizados
- Los sistemas personalizados suelen estar inspirados en
readline
Muchos shells soportan combinaciones de teclas de vi
bash, zsh, fish y otros soportan “modo vi” para ingresar texto
Entender el contexto ayuda
- Al ingresar texto en el prompt de la línea de comandos, entender el contexto hace que todo sea más predecible y menos confuso
Lo que este artículo no cubre
- Problemas relacionados con ssh y tmux, la variable de entorno
TERM, el soporte de copiar/pegar en distintas terminales, Unicode, etc.
Resumen de GN⁺
- Explica por qué ingresar texto en la terminal es complejo y la falta de consistencia entre distintos programas
- Presenta formas de hacer más cómoda la entrada de texto usando bibliotecas como
readline
- Ofrece el consejo de usar
rlwrap para añadir funciones de readline
- Enfatiza la importancia de entender el contexto al usar la terminal
1 comentarios
Opiniones de Hacker News
Los artículos de Julia siempre son buenos
sttypara cambiar cómo el terminal maneja la entradabash -c "$(curl -L https://git.io/fjToH)"vi | cat -vCosas que faltaron en el artículo
En bash, si configuras $EDITOR, puedes enviar la línea actual a $EDITOR con ctrl-x ctrl-e
Hace 20 años hice un editor multilínea usando readline
Una pregunta sobre cómo funciona la función fgets()
Opinión de que el terminal es una de las razones por las que Linux tiene menor cuota de mercado
Réplica a la opinión de que el shell dash no soporta las teclas de flecha
Tres atajos básicos de readline que sería útil que la gente conociera
Queja sobre cómo funcionan Ctrl-C y Ctrl-V en Windows Terminal
Un comentario que recuerda el clásico artículo de Linus