Czy jest jakiś sposób, aby uzyskać bash z podświetlaniem składni jak ryba?

41

W skorupce ryby rzeczywista linia poleceń jest podświetlona:

wprowadź opis zdjęcia tutaj

Czy jest jakiś sposób na uzyskanie tego samego zachowania w bash?

Jest coś takiego, ale dla zsh, nie bash. Czy to możliwe, że można to przenieść do bash?

Aby wyjaśnić tym, którzy nie rozumieją zrzutu ekranu, objaśnienia lub linku: Chcę podświetlić tekst wprowadzony na terminalu. Polecenia, nawiasy, cytaty itp.

Wuffers
źródło
Nie myśl, że bash akceptuje wtyczki tak jak Zsh, więc może to wymagać niestandardowej kompilacji powłoki / pliku bash. Czy jest jakiś powód, aby nie używać ryb? Ponadto dziękuję za wskazanie mi innej powłoki do zabawy i sprawdzenia, czy mogę nauczyć się zaawansowanych funkcji haha.
Matrix Mole
1
@ Matrix: Nie mogę używać ryb, ponieważ mam bardzo złożoną konfigurację bash, której nie mogłem się poddać.
Wuffers,
Niestety nie sądzę, że jest to obecnie możliwe w bash. Jestem pewien, że badania, które przeprowadziłeś, również na to wskazują. Jeśli absolutnie nie możesz przejść na zsh, to jest zrozumiałe, ale w przeciwnym razie możesz spojrzeć na fizsh, który zawiera niektóre funkcje podobne do ryb w zsh, chociaż nie został zaktualizowany od lutego, więc być może link wyróżniający składnię zsh który podałeś byłby bardziej niezawodny.
voithos
1
Byłoby to bardzo korzystne dla nauki bash, ponieważ pozwala na zabawę w zupełnie inny sposób. Cenne byłoby po prostu zauważenie, że zapomniałeś uciec specjalnej postaci.
Sirap

Odpowiedzi:

8

Bash używa readlinedo interaktywnego wprowadzania danych, dlatego w tym programie trzeba będzie zaimplementować podświetlanie składni. Znalazłem dyskusję w Grupach dyskusyjnych Google na temat kodowania takiej funkcji.

Ryba używa własnego edytora linii, który jest specyficzny dla tego programu i nie może być bezpośrednio przeniesiony.

Może się okazać, że zshjest bardzo podobny do bash, a jego edytor linii jest rozszerzalny . Znalazłem podświetlanie składni zsh, aby włączyć tę funkcję w zsh.

razzintown
źródło
1

Nie ma prostego sposobu uzyskania podświetlenia składni w GNU Bash (lub GNU Readline), ale w zasadzie możliwe jest zaimplementowanie własnego edytora linii w skryptach Bash poprzez powiązanie wszystkich danych wejściowych użytkownika z funkcjami powłoki za pomocą wbudowanego polecenia bind -x 'BYTE: SHELL-COMMAND'. Oczywiście można zintegrować funkcję podświetlania składni z własnym edytorem linii.

W rzeczywistości zaimplementowałem edytor linii ble.shz funkcjami takimi jak podświetlanie składni i automatyczne sugestie. Obsługuje Bash 3.0--5.0. Ponieważ jest napisany w (prawie-) czystych skryptach Bash, możesz po prostu sourceskrypt ~/.bashrc. Oto próbka do skonfigurowania ble.shw bashrc (szczegóły w README ):

$ 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

Uwaga : Wiem, że czasami odpowiadanie na pytania z linkami do własnych produktów jest uważane za autopromocję i jest niemożliwe, dlatego powstrzymałem się od odpowiedzi na to pytanie. Jednak żadne inne rozwiązanie nie pojawiło się długo, a także to pytanie ma wiele poglądów (co odzwierciedla jego znaczny popyt). Postanowiłem więc dzisiaj odpowiedzieć na to pytanie. Odnosząc się do następujących meta pytań / odpowiedzi, najpierw opisałem ten pomysł, a następnie podałem link do mojego projektu jako przykładową implementację.

Tak, muszę przyznać, że tak naprawdę jest to autopromocja , ale wierzę, że pomaga to ludziom, którzy chcą tej funkcji. Jeśli pojawią się problemy, byłbym wdzięczny, gdybyś mógł mi to powiedzieć w komentarzach.

akinomyoga
źródło
-1

Nie sądzę, że podświetlanie składni powinno odbywać się na poziomie powłoki, ale na poziomie interfejsu (tylko moja opinia - i wydaje się , że kogoś innego - ), więc szukałbym „wtyczek” dla Terminalu lub twojej ulubionej konsoli, na przykład tej wtyczki dla Kate może pomóc, lub ta inna, która oferuje podświetlanie składni w nano

Oto jeszcze więcej dyskusji na temat sposobu podświetlania składni w Terminalu:

Dodaj alias ls = 'ls -G' do .bash_profile.

chociaż tutaj lepiej wyjaśniono, jak to zrobić

Mam nadzieję, że to pomoże

Purefan
źródło
11
Wygląda na to, że odpowiadasz, jak skonfigurować podświetlanie składni w edytorach, a nie w powłoce. Kolorystyka ls nie wyróżnia nawet „składni”.
Kyle Strand
Myślę, że bardziej skupiasz się na semantyce niż na rozwiązaniu, dzięki kodowi z linków i sugerowanemu rozwiązaniu otrzymuję kolory w bash, co moim zdaniem OP chciał wiedzieć
Purefan
10
Pierwotne pytanie dotyczy w rzeczywistości dość wyraźnego podświetlania składni. Pokazuje to zarówno zrzut ekranu skorupy ryby, jak i ostatnie zdanie: „Chcę podświetlić tekst wprowadzony na terminalu. Polecenia, nawiasy, cytaty itp.”
Kyle Strand
9
Jak powiedziałem, nie jest to wyróżnianie „składniowe”. Podkreślają one wynik działania lspolecenia na podstawie typu pliku, który nie ma nic wspólnego ze składnią powłoki.
Kyle Strand
2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) i Fish ( fishshell.com/docs/current/tutorial.html ) mają podświetlanie składni, to pytanie oczywiście dotyczy podobnej funkcji bash. Jest to całkowicie poprawne żądanie, aby poprosić o funkcję, która jest „trudna do wdrożenia i zachowuje spójność”, zwłaszcza gdy już istnieje w innych powłokach
Brandon