Existe-t-il un moyen d'obtenir que la syntaxe soit soulignée comme du poisson par bash?

41

Dans la coquille de poisson , la syntaxe de la ligne de commande est la suivante:

entrez la description de l'image ici

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

Il y a quelque chose comme ça mais pour zsh, pas 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 souhaite mettre en surbrillance le texte saisi au terminal. Les commandes, parenthèses, guillemets, etc.

Wuffers
la source
Ne croyez pas que bash accepte les plugins comme le fait zsh, cela nécessitera peut-être une construction personnalisée du shell / binary bash. Une raison de ne pas utiliser du poisson à la place? Merci également de m'avoir orienté vers un autre shell avec lequel je peux jouer et voir si je peux apprendre certaines fonctionnalités avancées de haha.
Matrix Mole
1
@ Matrix: Je ne peux pas utiliser de poisson car j'ai une configuration de bash très complexe que je ne pouvais pas abandonner.
Wuffers
Malheureusement, je ne pense pas que cela soit actuellement possible en bash. Je suis sûr que les recherches que vous avez effectuées le montrent également. Si vous ne pouvez absolument pas passer à zsh, c'est compréhensible, mais sinon, vous voudrez peut-être examiner fizsh, qui intègre certaines fonctionnalités de type poisson dans zsh, bien qu'il n'ait pas été mis à jour depuis février. que vous avez fourni serait plus robuste.
voithos
1
Cela serait extrêmement bénéfique pour l'apprentissage de Bash, car cela permet de jouer d'une manière totalement différente. Il serait utile de savoir facilement que vous avez oublié d'échapper à un personnage spécial.
Sirap

Réponses:

8

Bash utilise readlinepour la saisie interactive, la surbrillance de la syntaxe doit donc être implémentée dans ce programme. J'ai trouvé une discussion de groupe Google sur la manière de coder une telle fonctionnalité.

La coquille de poisson utilise son propre éditeur de lignes, spécifique à ce programme, et ne peut pas être directement porté.

Vous trouverez peut-être que cela zshressemble beaucoup à bash et que son éditeur de lignes est extensible . J'ai trouvé zsh-syntax-highlighting pour activer cette fonctionnalité dans zsh.

Razzintown
la source
1

Il n’existe pas de moyen simple d’obtenir la coloration syntaxique dans GNU Bash (ou GNU Readline), mais il est en principe possible d’implémenter votre propre éditeur de lignes dans des scripts Bash en liant toutes les entrées utilisateur à des fonctions de shell à l’aide de la commande intégrée bind -x 'BYTE: SHELL-COMMAND'. Il est bien entendu possible d'intégrer la fonctionnalité de mise en évidence de la syntaxe dans votre propre éditeur de lignes.

En fait, j'ai implémenté un éditeur de lignes ble.shavec des fonctionnalités telles que la coloration syntaxique et les suggestions automatiques. Il prend en charge Bash 3.0--5.0. Comme il est écrit dans des scripts Bash (presque) purs, vous pouvez simplement insérer sourcele script dans ~/.bashrc. Voici un exemple à configurer ble.shdans bashrc (voir le fichier LISEZMOI 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_bash)) && ble-attach

Remarque : je sais que parfois, répondre à des questions contenant des liens vers des produits propres est considéré comme une auto-promotion et une préférence, alors je me suis abstenu de répondre à cette question. Cependant, aucune autre solution n’est apparue longtemps, et cette question suscite de nombreux points de vue (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 à titre d'exemple de mise en œuvre.

Oui, je dois admettre que c'est en fait de la promotion personnelle , mais je crois que cela aide les personnes qui veulent la fonctionnalité. S'il y a des problèmes, je vous serais reconnaissant de bien vouloir me le dire par des commentaires.

akinomyoga
la source
-1

Je ne pense pas que la mise en évidence de la syntaxe devrait se produire au niveau du shell mais au niveau de l'interface (juste mon avis - et celui de quelqu'un d'autre semble-il) -, alors je chercherais des "plugins" pour Terminal ou votre console préférée, par exemple ce plug- in pour Kate pourrait aider, ou cet autre qui propose la coloration syntaxique en nano

Voici encore plus de discussions sur la coloration syntaxique dans Terminal:

Ajoutez l’alias ls = 'ls -G' à .bash_profile.

bien ici est mieux expliqué la façon de

J'espère que ça aide

Purefan
la source
11
Vous semblez indiquer comment configurer la coloration syntaxique dans les éditeurs, pas dans le shell. La ls-colorisation n'est même pas mise en évidence par la "syntaxe".
Kyle Strand
Je pense que vous vous concentrez davantage sur la sémantique que sur la solution, avec le code des liens et la solution suggérée, je reçois des couleurs en bash, ce que le PO voulait savoir
mon avis
10
La question initiale porte en fait assez clairement sur la mise en évidence de la syntaxe. Ceci est illustré à la fois par la capture d'écran de la coquille de poisson et par la dernière phrase: "Je souhaite mettre en surbrillance le texte saisi au terminal. Les commandes, parenthèses, citations, etc."
Kyle Strand
9
Comme je l'ai dit, ce n'est pas la syntaxe. Celles-ci mettent en évidence le résultat de la lscommande en fonction du type de fichier, ce qui n’a rien à voir avec la syntaxe du shell.
Kyle Strand
2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) et Fish ( fishshell.com/docs/current/tutorial.html ) ont tous deux une coloration syntaxique en surbrillance. Cette question concerne évidemment une fonctionnalité similaire pour bash. C'est une demande tout à fait valable de demander une fonctionnalité «difficile à mettre en œuvre et à conserver la cohérence», en particulier lorsqu'elle existe déjà dans d'autres shells
Brandon