Gibt es eine Möglichkeit, Bash zu erzeugen, um Syntax-Hervorhebungen wie Fische zu erzeugen?

41

In der Fish Shell ist die aktuelle Befehlszeile syntaktisch hervorgehoben:

Bildbeschreibung hier eingeben

Gibt es eine Möglichkeit, dasselbe Verhalten in Bash zu erzielen?

Es gibt so etwas nur für zsh, nicht für bash. Ist es möglich, dass dies zu Bash portiert werden könnte?

Zur Verdeutlichung für diejenigen, die den bereitgestellten Screenshot, die Erklärung oder den Link nicht verstehen: Ich möchte den tatsächlichen Text hervorheben, der am Terminal eingegeben wird. Die Befehle, Klammern, Anführungszeichen usw.

Wuffers
quelle
Denken Sie nicht, dass bash Plugins akzeptiert, wie zsh es tut, daher ist möglicherweise eine benutzerdefinierte Erstellung der bash-Shell / -Binärdatei erforderlich. Gibt es einen Grund, nicht nur Fisch zu verwenden? Vielen Dank auch, dass Sie mich auf eine andere Shell verwiesen haben, mit der ich herumspielen und sehen kann, ob ich einige erweiterte Funktionen von haha ​​erlernen kann.
Matrix Mole
1
@ Matrix: Ich kann keinen Fisch verwenden, da ich eine sehr komplexe Bash-Konfiguration habe, auf die ich nicht verzichten kann.
Wuffers
Leider glaube ich nicht, dass dies derzeit in Bash möglich ist. Ich bin mir sicher, dass die Forschung, die Sie durchgeführt haben, auch darauf hindeutet. Wenn Sie absolut nicht zu zsh wechseln können, ist das verständlich, aber ansonsten möchten Sie vielleicht fizsh betrachten, das einige fischähnliche Funktionen in zsh integriert, obwohl es seit Februar nicht aktualisiert wurde, also vielleicht den Link zsh-syntax-highlighting dass Sie zur Verfügung gestellt würde robuster sein.
Voithos
1
Dies wäre für das Lernen von Bash von großem Vorteil, da es das Herumspielen auf eine ganz andere Art und Weise ermöglicht. Nur leicht zu erkennen, dass Sie vergessen haben, einem besonderen Charakter zu entkommen, wäre wertvoll.
Sirap

Antworten:

8

Bash wird readlinefür interaktive Eingaben verwendet, sodass die Syntaxhervorhebung in diesem Programm implementiert werden muss. Ich habe eine Google Groups-Diskussion zum Codieren einer solchen Funktion gefunden.

Die Fischschale verwendet einen eigenen Zeileneditor, der für dieses Programm spezifisch ist und nicht direkt portiert werden kann.

Möglicherweise zshähnelt dies Bash und der Zeileneditor ist erweiterbar . Ich habe zsh-syntax-highlighting gefunden , um diese Funktion in zsh zu aktivieren.

Razzintown
quelle
1

Es gibt keine einfache Möglichkeit, eine Syntaxhervorhebung in GNU Bash (oder GNU Readline) zu erhalten, aber es ist grundsätzlich möglich, einen eigenen Zeileneditor in Bash-Skripten zu implementieren, indem alle Benutzereingaben mit dem eingebauten Befehl an Shell-Funktionen gebunden werden bind -x 'BYTE: SHELL-COMMAND'. Es ist natürlich möglich, das Feature der Syntaxhervorhebung in Ihren eigenen Zeileneditor zu integrieren.

Tatsächlich habe ich einen Zeileneditor ble.shmit Funktionen wie Syntaxhervorhebung und automatischen Vorschlägen implementiert . Es unterstützt Bash 3.0-5.0. Da es in (fast) reinen Bash-Skripten geschrieben ist, können Sie nur sourcedas Skript in ~/.bashrc. Hier ist ein Beispiel für die Einrichtung ble.shin bashrc ( Details finden Sie in der README- Datei ):

$ 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

Hinweis : Ich weiß, dass das Beantworten von Fragen mit Links zu eigenen Produkten manchmal als Eigenwerbung und nicht wünschenswert angesehen wird. Daher habe ich auf die Beantwortung dieser Frage verzichtet. Es gab jedoch keine anderen Lösungen, die nicht lange auftauchten, und auch diese Frage hat viele Ansichten (was ihre erhebliche Nachfrage widerspiegelt). Also habe ich beschlossen, diese Frage heute zu beantworten. Unter Bezugnahme auf die folgenden Meta-Fragen / Antworten habe ich die Idee zuerst beschrieben und als Beispiel für die Implementierung einen Link zu meinem Projekt bereitgestellt.

Ja, ich muss zugeben, dass dies eigentlich Eigenwerbung ist , aber ich glaube, dass dies Menschen hilft, die das Feature wollen. Wenn es Probleme gibt, würde ich mich freuen, wenn Sie mir dies durch Kommentare mitteilen könnten.

akinomyoga
quelle
-1

Ich denke nicht Syntax - Hervorhebung auf der Shell - Ebene geschehen soll , sondern an der Schnittstelle Ebene (nur meine Meinung -und jemanden anderes es seems-), so dass ich in „Plugins“ für Terminal oder Ihre Lieblings - Konsole, zum Beispiel aussehen würde dieser Plug in für Kate könnte helfen, oder diese andere, die Syntax-Hervorhebung in Nano bietet

Im Folgenden erfahren Sie noch mehr über das Syntaxhervorheben in Terminal:

Fügen Sie alias ls = 'ls -G' zu .bash_profile hinzu.

obwohl hier das wie besser erklärt wird

Ich hoffe es hilft

Purefan
quelle
11
Anscheinend antworten Sie, wie Sie die Syntaxhervorhebung in Editoren einrichten, nicht in der Shell. Die ls-Einfärbung ist nicht einmal eine Hervorhebung der "Syntax".
Kyle Strand
Ich glaube, Sie konzentrieren sich mehr auf die Semantik als auf die Lösung. Mit dem Code aus den Links und dem Lösungsvorschlag erhalte ich Bash-Farben, von denen ich glaube, dass sie das ist, was das OP wissen wollte
Purefan
10
Die ursprüngliche Frage ist eigentlich ganz klar über die tatsächliche Hervorhebung der Syntax. Dies wird sowohl durch den Screenshot der Fischschale als auch durch den letzten Satz gezeigt: "Ich möchte den tatsächlichen Text hervorheben, der am Terminal eingegeben wird. Die Befehle, Klammern, Anführungszeichen usw."
Kyle Strand
9
Wie gesagt, es ist keine "Syntax" Hervorhebung. Diese heben die Ausgabe des lsBefehls basierend auf dem Dateityp hervor, der nichts mit der Shell-Syntax zu tun hat.
Kyle Strand
2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) und Fish ( fishshell.com/docs/current/tutorial.html ) haben beide Syntax-Hervorhebungen. Diese Frage bezieht sich offensichtlich auf eine ähnliche Funktion für Bash. Es ist eine absolut gültige Anforderung, nach einer Funktion zu fragen, die "schwer zu implementieren und konsistent zu halten" ist, insbesondere wenn sie bereits in anderen Shells vorhanden ist
Brandon,