Có cách nào để bash có cú pháp tô sáng như cá không?


41

Trong vỏ cá , dòng lệnh thực tế được cú pháp tô sáng:

nhập mô tả hình ảnh ở đây

Có cách nào để có được hành vi tương tự trong bash không?

một cái gì đó giống như thế này nhưng đối với zsh, không phải bash. Có thể là điều này có thể được chuyển sang bash?

Để làm rõ cho những người không hiểu ảnh chụp màn hình, giải thích hoặc liên kết được cung cấp: Tôi muốn làm nổi bật văn bản thực tế được nhập tại thiết bị đầu cuối. Các lệnh, dấu ngoặc đơn, dấu ngoặc kép, v.v.


Đừng nghĩ bash chấp nhận các plugin như zsh, vì vậy nó có thể yêu cầu một bản dựng tùy chỉnh của bash shell / binary. Bất kỳ lý do không chỉ sử dụng cá thay thế? Ngoài ra, cảm ơn vì đã chỉ cho tôi một vỏ khác để chơi xung quanh và xem liệu tôi có thể tìm hiểu một số tính năng nâng cao của haha ​​không.
Nốt ruồi ma trận

1
@Matrix: Tôi không thể sử dụng cá vì tôi có cấu hình bash rất phức tạp mà tôi không thể từ bỏ.
Wuffers

Thật không may, tôi không nghĩ rằng điều này hiện có thể có trong bash. Tôi chắc chắn rằng nghiên cứu mà bạn đã thực hiện cũng chỉ ra điều đó. Nếu bạn hoàn toàn không thể chuyển sang zsh, thì điều đó có thể hiểu được, nhưng nếu không, bạn có thể muốn xem fizsh kết hợp một số tính năng giống như cá vào zsh, mặc dù nó đã không được cập nhật từ tháng 2, vì vậy có lẽ liên kết làm nổi bật cú pháp zsh mà bạn cung cấp sẽ mạnh mẽ hơn.
voithos

1
Điều này sẽ rất có lợi cho việc học bash, vì nó cho phép chơi xung quanh theo một cách hoàn toàn khác. Chỉ cần dễ dàng phát hiện ra rằng bạn quên thoát khỏi một nhân vật đặc biệt sẽ có giá trị.
Sirap

Câu trả lời:


8

Bash sử dụng readlinecho đầu vào tương tác, do đó, việc đánh dấu cú pháp sẽ cần được thực hiện trong chương trình đó. Tôi đã tìm thấy một cuộc thảo luận về Google Groups về cách mã hóa một tính năng như vậy.

Vỏ cá sử dụng trình soạn thảo dòng riêng dành riêng cho chương trình đó và không thể chuyển trực tiếp.

Bạn có thể thấy nó zshrất giống với bash và trình chỉnh sửa dòng của nó có thể mở rộng . Tôi tìm thấy zsh-cú pháp làm nổi bật để kích hoạt tính năng này trong zsh.


1

Không có cách đơn giản nào để làm nổi bật cú pháp trong GNU Bash (hoặc GNU Readline), nhưng về nguyên tắc có thể thực hiện trình soạn thảo dòng của riêng bạn trong các tập lệnh Bash bằng cách liên kết tất cả các đầu vào của người dùng với các hàm shell bằng lệnh dựng sẵn bind -x 'BYTE: SHELL-COMMAND'. Tất nhiên có thể tích hợp tính năng tô sáng cú pháp trong trình chỉnh sửa dòng của riêng bạn.

Trong thực tế, tôi đã triển khai một trình chỉnh sửa dòng ble.shvới các tính năng như tô sáng cú pháp và đề xuất tự động. Nó hỗ trợ Bash 3.0--5.0. Vì nó được viết bằng (gần như) các tập lệnh Bash thuần túy, nên bạn chỉ có thể sourceviết tập lệnh ~/.bashrc. Đây là một mẫu để thiết lập ble.shtrong bashrc (xem README để biết chi tiết):

$ 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

Lưu ý : Tôi biết rằng đôi khi trả lời các câu hỏi có liên kết đến các sản phẩm của riêng mình được coi là tự quảng cáo và không đáng tin cậy, vì vậy tôi đã không chịu trả lời câu hỏi này. Tuy nhiên, không có giải pháp nào khác không xuất hiện trong thời gian dài và câu hỏi này cũng có nhiều quan điểm (phản ánh nhu cầu quan trọng của nó). Vì vậy, tôi quyết định trả lời cho câu hỏi này ngày hôm nay. Đề cập đến các câu hỏi / câu trả lời meta sau đây, tôi đã mô tả ý tưởng đầu tiên và tiếp theo cung cấp một liên kết đến dự án của tôi như là một triển khai ví dụ.

Vâng, tôi phải thừa nhận rằng đây thực sự là tự quảng cáo , nhưng tôi tin rằng điều này sẽ giúp những người muốn tính năng này. Nếu có vấn đề, tôi sẽ đánh giá cao nếu bạn có thể cho tôi biết điều đó bằng các bình luận.


-1

Tôi không nghĩ rằng cú pháp làm nổi bật nên xảy ra ở cấp vỏ nhưng ở cấp giao diện (chỉ là ý kiến của tôi -Và của người khác nó seems-), vì vậy tôi sẽ nhìn vào "plugins" cho Terminal hoặc giao diện điều khiển yêu thích của bạn, ví dụ cắm này ở cho Kate có thể giúp hoặc cái này cung cấp cú pháp tô sáng bằng nano

Ở đây vẫn còn nói nhiều hơn về cách làm nổi bật cú pháp trong Terminal:

Thêm bí danh ls = 'ls -G' vào .bash_profile.

mặc dù ở đây được giải thích tốt hơn làm thế nào để

Hy vọng nó giúp


11
Có vẻ như bạn đang trả lời cách thiết lập tô sáng cú pháp trong trình chỉnh sửa chứ không phải trong trình bao. Việc tô màu ls thậm chí không làm nổi bật "cú pháp".
Kyle Strand

Tôi nghĩ rằng bạn đang tập trung vào ngữ nghĩa nhiều hơn vào giải pháp, với mã từ các liên kết và giải pháp được đề xuất tôi nhận được màu sắc trong bash, mà tôi tin là những gì OP muốn biết
Purefan

10
Câu hỏi ban đầu thực sự khá rõ ràng về đánh dấu cú pháp thực tế. Điều này được hiển thị cả bằng ảnh chụp màn hình của vỏ cá và câu cuối cùng: "Tôi muốn làm nổi bật văn bản thực tế được nhập tại thiết bị đầu cuối. Các lệnh, dấu ngoặc đơn, dấu ngoặc kép, v.v."
Kyle Strand

9
Như tôi đã nói, nó không phải là "cú pháp" làm nổi bật. Chúng đang làm nổi bật đầu ra của lslệnh dựa trên loại tệp, không liên quan gì đến cú pháp shell.
Kyle Strand

2
Zsh ( github.com/zsh-users/zsh-syntax-highlighting ) và Fish ( fishshell.com/docs/cien/tutorial.html ) đều có đánh dấu cú pháp, câu hỏi này rõ ràng là hỏi về một tính năng tương tự cho bash. Đó là một yêu cầu hoàn toàn hợp lệ để yêu cầu một tính năng "khó thực hiện và giữ nhất quán", đặc biệt là khi nó đã tồn tại trong các shell khác
Brandon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.