Tôi có thể đánh dấu dòng nhắc hiện tại trong zsh không?


8

Có thể tô sáng (đặt màu nền) cho toàn bộ dòng nhắc trong zshkhông? Trong cấu hình emacs của tôi, tôi có dòng trên đó con trỏ có màu hơi khác so với nền cửa sổ, đây là một công cụ hỗ trợ thị giác tuyệt vời. Tôi đang tự hỏi liệu có thể làm điều tương tự trong lời nhắc thiết bị đầu cuối / zsh của mình hay không, để nó thực sự "vẽ một đường" dưới mọi thứ đang được chạy.

Tôi đã thử cài đặt PROMPT='%{$bg[grey]%}# 'trong phần của mình .zshrcnhưng phần tô sáng chỉ kéo dài đến khi tôi gõ chứ không đến rìa của thiết bị đầu cuối.

Là những gì tôi đang cố gắng để đạt được có thể?

Câu trả lời:


1

Hãy thử đặt RPROMPT vào khoảng trắng. Số lượng khoảng trắng sẽ là chiều rộng của thiết bị đầu cuối (trừ #các ký tự và các ký tự khác.)


1
bạn có thể chỉ định lệnh chính xác?
kirill_igum

1

Bạn có thể làm bất cứ điều gì bạn muốn với dòng nhắc * - khía cạnh có vấn đề là làm cho nó hoàn tác sau đó. Tôi giả sử bạn không muốn mỗi dòng duy nhất đã có một dấu nhắc trên nó được hiển thị bằng màu sắc hoàng hôn của bạn.

Sau đó, việc xóa dòng sẽ dễ dàng hơn, nhưng sau đó bạn không có lệnh của mình. Có thể xóa dấu nhắc sau đó lặp lại lệnh (với dấu nhắc giả như $). Bạn có thể có dấu nhắc bắt đầu bằng chuỗi lưu con trỏ ANSI ESC [s, sau đó precmdkhôi phục nó ESC [uvà xóa mọi thứ sau con trỏ ESC [0J, sau đó lặp lại lệnh (Tôi không nhớ cách lấy lệnh từ bên trong precmd).

* Đây là một câu trả lời không đầy đủ, tôi không biết làm thế nào để làm cho nó làm mờ lệnh trong một màu nền khác.


1

Nếu tôi thay đổi greyđến white, ví dụ của bạn thực sự làm việc cho tôi.

Bạn đang sử dụng thiết bị đầu cuối nào? Có lẽ nó xử lý xóa màu nền khác nhau?

Dưới đây là một số lựa chọn thay thế để thử:

Cung cấp cho toàn bộ dòng nhắc nhở một nền màu xám:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="$(tput setab 7)# "

(nên giống như ví dụ của bạn, nhưng cách viết khác.)

In một dòng trước lời nhắc:

precmd() {
    tput smul
    for ((n=0; n<COLUMNS; n++)) { printf " "; }
    printf "\n"
}
preexec() {
    tput sgr0
}

(Nếu bạn thay đổi "\n"thành "\r", nó sẽ gạch chân dòng hiện tại, nhưng dường như nó không hoạt động. Tôi đoán zsh xóa dòng hiện tại khi in lời nhắc, đó là điều dẫn tôi đến giải pháp đầu tiên.)

Tạo các lệnh (tức là mọi thứ bạn nhập) in đậm:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
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.