Чи є спосіб отримати башти, щоб виділити синтаксис, як риба?


40

У рибній оболонці фактичний командний рядок виділений синтаксисом:

введіть тут опис зображення

Чи є такий спосіб отримати таку саму поведінку в баші?

Є щось саме так, але для zsh, а не bash. Чи можливо, що це можна було перенести на башти?

Щоб уточнити для тих, хто не розуміє скріншот, пояснення чи надане посилання: Я хочу виділити фактичний текст, який вводиться в термінал. Команди, дужки, цитати тощо.


Не думайте, що bash приймає плагіни, як zsh, тому може знадобитися спеціальна збірка bash shell / binary. Будь-яка причина не просто використовувати рибу замість цього? Також дякую, що вказав мені на іншу оболонку, з якою я можу пограти і побачити, чи зможу я вивчити деякі вдосконалені функції ха-ха.
Matrix Mole

1
@Matrix: Я не можу використовувати рибу, оскільки у мене дуже складна конфігурація bash, яку я не міг відмовитись.
Wuffers

На жаль, я не думаю, що наразі це можливо в баш. Я впевнений, що дослідження, які ви проводили, вказують і на це. Якщо ви абсолютно не можете переключитися на zsh, це зрозуміло, але в іншому випадку ви можете подивитися на fizsh, який містить деякі рибні функції в zsh, хоча він не оновлювався з лютого, тому, можливо, посилання виділення синтаксису zsh що ви надали, було б більш надійним.
voithos

1
Це було б дуже корисно для навчання башу, оскільки це дозволяє грати зовсім по-іншому. Тільки легко помітити, що ти забув уникнути особливого персонажа, було б цінним.
Сірап

Відповіді:


8

Bash використовує readlineдля інтерактивного введення, тому виділення синтаксису потрібно реалізувати в цій програмі. Я знайшов дискусію в групах Google про те, як кодувати таку функцію.

Рибна оболонка використовує власний редактор рядків, специфічний для цієї програми, і не може бути перенесений безпосередньо.

Ви можете виявити, що zshце дуже схоже на bash, і його редактор рядків можна розширити . Я знайшов zsh-синтаксис-підсвічування, щоб увімкнути цю функцію в zsh.


0

Немає простого способу отримати виділення синтаксису в GNU Bash (або GNU Readline), але в принципі можливо реалізувати власний редактор рядків у сценаріях Bash, прив’язавши всі входи користувача до функцій оболонки за допомогою вбудованої команди bind -x 'BYTE: SHELL-COMMAND'. Звичайно, можливо інтегрувати особливість виділення синтаксису у власному редакторі рядків.

Насправді я реалізував редактор рядків ble.shз такими функціями, як підсвічування синтаксису та автоматичні пропозиції. Він підтримує Bash 3.0--5.0. Оскільки він написаний (майже -) чистими сценаріями Bash, ви можете просто sourceв сценарії ~/.bashrc. Ось зразок для установки ble.shв bashrc (детальніше див. 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

Примітка . Я знаю, що інколи відповідати на запитання із посиланнями на власні продукти вважається саморекламою та невибагливою, тому я не вдавався відповідати на це питання. Однак жодне інше рішення не з’являлося тривалий час, і також це питання має багато поглядів (що відображає його значний попит). Тому я вирішив сьогодні відповісти на це питання. Посилаючись на наступні мета-запитання / відповіді, я спершу описав ідею, а далі подав посилання на мій проект як приклад реалізації.

Так, я мушу визнати, що це насправді самореклама , але я вважаю, що це допомагає людям, які бажають цієї функції. Якщо є проблеми, я би вдячний, якщо ви можете сказати мені це за допомогою коментарів.


-1

Я не думаю, що виділення синтаксису повинно відбуватися на рівні оболонки, але на рівні інтерфейсу (тільки моя думка - і це здається комусь іншому ), тож я б заглянув у "плагіни" для терміналу або вашої улюбленої консолі, наприклад, цей плагін для Кейт може допомогти, або цей інший, який пропонує виділення синтаксису в нано

Тут ще йдеться про те, як виділити синтаксис у Terminal:

Додати псевдонім ls = 'ls -G' в .bash_profile.

хоча тут краще пояснено, як це зробити

Сподіваюся, це допомагає


11
Схоже, ви відповідаєте, як налаштувати виділення синтаксису в редакторах, а не в оболонці. Колорифікація ls навіть не підкреслює "синтаксис".
Кайл Странд

Я думаю, що ви більше зосереджуєтесь на семантиці, ніж на рішенні, з кодом із посилань та запропонованим рішенням я отримую кольори в баші, про що я вважаю, про що хотів знати ОП
Purefan

10
Оригінальне запитання насправді досить чітко стосується фактичного виділення синтаксису. Це показано як на скріншоті рибної оболонки, так і в заключному реченні: "Я хочу виділити фактичний текст, який вводиться в термінал. Команди, дужки, цитати тощо".
Кайл Странд

9
Як я вже говорив, це не «синтаксичне» підсвічування. Вони підкреслюють вихід lsкоманди з урахуванням типу файлу, який не має нічого спільного з синтаксисом оболонки.
Кайл Странд

2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) та Fish ( fishshell.com/docs/current/tutorial.html ) мають підсвічування синтаксису, це питання, очевидно, задає подібну особливість для bash. Цілком справедливий запит просити функцію, яку "важко реалізувати та підтримувати послідовно", особливо коли вона вже існує в інших оболонках
Брендон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.