56 votes

Existe-t-il un moyen de faire en sorte que bash ait une coloration syntaxique comme fish ?

Dans le poisson Shell la ligne de commande réelle est mise en évidence par la syntaxe :

enter image description here

Y a-t-il un moyen d'obtenir ce même comportement en bash ?

Il y a quelque chose comme ça mais pour zsh, pas pour bash. Est-il possible que cela puisse être porté à bash ?

Pour clarifier pour ceux qui ne comprennent pas la capture d'écran, l'explication ou le lien fourni : Je veux mettre en évidence le texte réel qui est entré dans le terminal. Les commandes, les parenthèses, les guillemets, etc.

12voto

razzintown Points 544

Bash utilise readline pour une entrée interactive, donc la coloration syntaxique devrait être implémentée dans ce programme. J'ai trouvé un Discussion sur les groupes Google sur la façon de coder une telle fonctionnalité.

Le poisson Shell utilise son propre qui est spécifique à ce programme, et ne peut pas être directement porté.

Vous pouvez constater que zsh est très similaire à bash, et son éditeur de ligne est extensible . J'ai trouvé zsh-syntax-highlighting pour activer cette fonctionnalité dans zsh.

11voto

akinomyoga Points 258

Il n'y a pas simple pour obtenir la coloration syntaxique dans GNU Bash (ou GNU Readline), mais il est en principe possible d'implémenter votre propre éditeur de ligne dans Bash script en liant toutes les entrées utilisateur à des fonctions script en utilisant la commande construite bind -x 'BYTE: SHELL-COMMAND' . Il est bien sûr possible d'intégrer la fonction de coloration syntaxique dans votre propre éditeur de ligne.

En fait, j'ai implémenté un éditeur de ligne ble.sh avec des fonctionnalités telles que la coloration syntaxique et les auto-suggestions. Il supporte Bash 3.0..5.1. Puisqu'il est écrit en scripts Bash (presque) purs, vous pouvez juste source le script en ~/.bashrc . Voici un exemple à mettre en place ble.sh dans le bashrc (voir README pour plus de détails) :

$ 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_VERSION-} ]] && ble-attach

Nota : Je sais que parfois répondre à des questions avec des liens vers ses propres produits est considéré comme de l'auto-promotion et non souhaitable, c'est pourquoi je me suis abstenu de répondre à cette question. Cependant, aucune autre solution n'est apparue depuis longtemps, et de plus cette question a beaucoup de vues (ce qui reflète sa demande importante). J'ai donc décidé de répondre à cette question aujourd'hui. En me référant aux méta-questions/réponses suivantes, j'ai d'abord décrit l'idée et ensuite fourni un lien vers mon projet comme exemple de mise en œuvre.

Oui, je dois admettre que c'est en fait autopromotion mais je pense que cela aide les personnes qui veulent cette fonctionnalité. S'il y a des problèmes, j'apprécierais que vous me le disiez dans les commentaires.

Mise à jour 2022-01-12 Mise à jour des versions de Bash supportées. Corriger la grammaire.

-6voto

ugaciaka Points 51

Je ne pense pas que la coloration syntaxique devrait se faire au niveau de Shell mais au niveau de l'interface (juste mon opinion -et de quelqu'un d'autre ), je me pencherais donc sur les "plugins" pour Terminal ou votre console préférée, par exemple cette fiche pour Kate pourrait aider, ou cet autre qui offre une coloration syntaxique dans nano

Ici Il y a encore des discussions sur la façon de mettre en évidence la syntaxe dans le terminal :

Ajouter l'alias ls='ls -G' au fichier .bash_profile.

bien que aquí est mieux expliqué le comment

J'espère que cela vous aidera

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X