¿Hay alguna manera de hacer que bash tenga resaltado de sintaxis como pez?

41

En el shell de peces , la línea de comando real está resaltada en la sintaxis:

ingrese la descripción de la imagen aquí

¿Hay alguna manera de obtener este mismo comportamiento en bash?

Hay algo como esto, pero para zsh, no bash. ¿Es posible que esto pueda ser portado a bash?

Para aclarar a aquellos que no entienden la captura de pantalla, la explicación o el enlace proporcionado: Quiero resaltar el texto real que se ingresa en la terminal. Los comandos, paréntesis, citas, etc.

Wuffers
fuente
No piense que bash acepta complementos como lo hace zsh, por lo que puede requerir una compilación personalizada del bash shell / binary. ¿Alguna razón para no usar pescado en su lugar? Además, gracias por señalarme otro shell para jugar y ver si puedo aprender algunas características avanzadas de jaja.
Matrix Mole
1
@Matrix: No puedo usar fish porque tengo una configuración bash muy compleja que no podía abandonar.
Wuffers
Desafortunadamente, no creo que esto sea posible actualmente en bash. Estoy seguro de que la investigación que has hecho apunta a eso también. Si absolutamente no puede cambiar a zsh, entonces es comprensible, pero de lo contrario es posible que desee mirar fizsh que incorpora algunas características similares a peces en zsh, aunque no se ha actualizado desde febrero, por lo que tal vez el enlace de resaltado de sintaxis zsh que proporcionaste sería más robusto.
voithos
1
Esto sería muy beneficioso para aprender bash, ya que permite jugar de una manera completamente diferente. Sería fácil descubrir que olvidaste escapar de un personaje especial.
Sirap

Respuestas:

8

Bash utiliza readlinepara la entrada interactiva, por lo que el resaltado de sintaxis debería implementarse en ese programa. Encontré una discusión de Grupos de Google sobre cómo codificar dicha función.

El shell de peces utiliza su propio editor de línea que es específico para ese programa y no se puede portar directamente.

Puede encontrar que zshes muy similar a bash, y su editor de línea es extensible . Encontré el resaltado de sintaxis zsh para habilitar esta función en zsh.

Razzintown
fuente
1

No hay una manera simple de obtener resaltado de sintaxis en GNU Bash (o GNU Readline), pero en principio es posible implementar su propio editor de línea en scripts Bash vinculando todas las entradas del usuario a las funciones de shell utilizando el comando incorporado bind -x 'BYTE: SHELL-COMMAND'. Por supuesto, es posible integrar la función de resaltado de sintaxis en su propio editor de línea.

De hecho, implementé un editor de líneas ble.shcon características como resaltado de sintaxis y sugerencias automáticas. Es compatible con Bash 3.0--5.0. Dado que está escrito en scripts de Bash (casi) puros, puede ingresar sourceel script ~/.bashrc. Aquí hay una muestra para configurar ble.shen bashrc (ver README para más detalles):

$ git clone https://github.com/akinomyoga/ble.sh.git
$ cd ble.sh
$ make
$ make INSDIR="$HOME/.local/share/blesh" install
# bashrc

# Add the following line at the beginning of bashrc
[[ $- == *i* ]] &&
  source "$HOME/.local/share/blesh/ble.sh" --attach=none

# ... other bashrc settings ...

# Add the following line at the end of bashrc
((_ble_bash)) && ble-attach

Nota : Sé que a veces responder preguntas con enlaces a productos propios se considera autopromoción y no es preferible, por lo que me he abstenido de responder a esta pregunta. Sin embargo, no aparecieron otras soluciones durante mucho tiempo, y esta pregunta también tiene muchos puntos de vista (lo que refleja su importante demanda). Así que decidí responder a esta pregunta hoy. Refiriéndome a las siguientes preguntas / respuestas meta, describí la idea primero y luego proporcioné un enlace a mi proyecto como ejemplo de implementación.

Sí, tengo que admitir que esto es en realidad autopromoción , pero creo que esto ayuda a las personas que desean la función. Si hay problemas, le agradecería que me lo dijera mediante comentarios.

akinomyoga
fuente
-1

No creo que el resaltado de sintaxis deba suceder a nivel de shell sino a nivel de interfaz (solo mi opinión, y la de alguien más parece), por lo que buscaría en "complementos" para Terminal o su consola favorita, por ejemplo, este complemento para Kate podría ayudar, o este otro que ofrece resaltado de sintaxis en nano

Aquí hay más información sobre cómo resaltar la sintaxis en Terminal:

Agregue el alias ls = 'ls -G' a .bash_profile.

aunque aquí se explica mejor cómo

Espero eso ayude

Purefan
fuente
11
Parece que está respondiendo cómo configurar el resaltado de sintaxis en los editores, no en el shell. La ls-colorization ni siquiera es resaltado de "sintaxis".
Kyle Strand
Creo que te estás centrando en la semántica más que en la solución, con el código de los enlaces y la solución sugerida, obtengo colores en bash, que creo que es lo que el OP quería saber
Purefan
10
La pregunta original es en realidad bastante clara sobre el resaltado de sintaxis real. Esto se muestra tanto en la captura de pantalla de la concha de pescado como en la frase final: "Quiero resaltar el texto real que se ingresa en la terminal. Los comandos, paréntesis, citas, etc."
Kyle Strand
99
Como dije, no se trata de resaltar "sintaxis". Esos están resaltando el resultado del lscomando basado en el tipo de archivo, que no tiene nada que ver con la sintaxis de shell.
Kyle Strand
2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) y Fish ( fishshell.com/docs/current/tutorial.html ) tienen resaltado de sintaxis, esta pregunta obviamente es acerca de una característica similar para bash. Es una solicitud completamente válida para solicitar una característica que es "difícil de implementar y mantener constante", especialmente cuando ya existe en otros shells
Brandon