2013-07-02 27 views
11

Nếu tôi đặt dấu nhắc lệnh của tôi như:Thêm chuỗi màu ANSI thoát ra một kết quả nhanh chóng bash ở vị trí con trỏ xấu khi nhớ lại/chỉnh sửa lệnh

export PS1='\033[0;33m[\[email protected]\h \w]\$ \033[00m' 

Màu sắc của cửa sổ sẽ có màu vàng và tất cả mọi thứ sau khi ' Ký tự $ 'sẽ là màu thiết bị đầu cuối mặc định. Đây là những gì tôi mong đợi. Tuy nhiên, nếu tôi nhớ lại một dòng lệnh và cố chỉnh sửa nó, hãy di chuyển con trỏ - hoặc UpArrow/Ctrl-A (set -o emacs) hoặc ESC K (set -o vi) nếu dòng lệnh tôi đang cố gắng chỉnh sửa đủ dài, con trỏ không được định vị ở đầu lệnh. Nhập một trong hai Ctrl-A (set -o emacs) hoặc^(set -o vi) sẽ không di chuyển con trỏ đến những gì tôi nhìn thấy khi bắt đầu dòng được gọi lại trên màn hình. Tương tự như vậy, cố định vị trí con trỏ đến cuối dòng (Ctrl-E hoặc $, tùy thuộc) kết quả trong nó được đặt một số ký tự qua những gì dường như là kết thúc của dòng. Có vẻ như bash đang bị lẫn lộn bởi các ký tự thoát mà tôi đã thêm vào lời nhắc. Đây có phải là điều tôi sẽ phải giải quyết, thay đổi lời nhắc của tôi thành lời đơn sắc khi tôi muốn chỉnh sửa đường bị thu hồi hay có cách nào để bash chính xác cho phép chỉnh sửa lệnh bị thu hồi bằng lời nhắc đầy màu sắc?

Trả lời

17

Bạn cần phải kèm theo các ký tự không in trong \[ ... \] để bash biết để bỏ qua chúng khi tính chiều dài của dấu nhắc:

export PS1='\[\033[0;33m\][\[email protected]\h \w]\$ \[\033[00m\]' 
+0

Vâng đó là chắc chắn đủ đơn giản - nhờ – Xaq

Các vấn đề liên quan