Đó là một tính năng cụ thể của zsh
(và bây giờ fish
cũng vậy) để cho phép bạn thấy rõ các dòng bị hủy trong đầu ra của lệnh.
Trong các shell truyền thống, nếu một lệnh xuất ra một số dữ liệu sau ký tự dòng mới cuối cùng, hay nói cách khác, nếu nó để con trỏ đầu cuối không ở đầu dòng, thì dấu nhắc tiếp theo của shell sẽ được nối với dòng bị hủy cuối cùng đó như trong:
bash-4.4$ printf XXX
XXXbash-4.4$
Điều đó mang lại lời nhắc, và thật dễ dàng để bỏ lỡ điều XXX
đó đặc biệt là nếu bạn có một lời nhắc nhanh như thế. Nó cũng ảnh hưởng đến định vị con trỏ gây ra sự cố hiển thị khi bạn di chuyển con trỏ xung quanh.
zsh
hoạt động xung quanh đó, bằng cách hiển thị rằng đầu ra có một dòng bị hủy với một %
ký tự trong video in đậm và ngược lại và đưa ra lời nhắc tiếp theo ở đầu dòng tiếp theo:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
Nó thực hiện điều đó bằng cách xuất video ngược %
ở cuối mỗi lệnh (trước mỗi dấu nhắc), nhưng theo sau là 79 khoảng trắng (giả sử thiết bị đầu cuối rộng 80 ký tự), ký tự CR (một ký tự khiến con trỏ quay trở lại đầu tiên cột) và chuỗi để xóa đến cuối dòng (và sau đó là dấu nhắc).
Theo cách đó, nếu có một dòng bị hủy, vì con trỏ không ở vị trí đầu tiên, 80 ký tự đó sẽ làm cho con trỏ di chuyển đến dòng tiếp theo (và nó %
sẽ ở lại). Nếu không, thì %
79 khoảng trống đó sẽ nằm trên một dòng sẽ bị xóa sau đó.
Bây giờ, điều đó chỉ hoạt động nếu thiết bị đầu cuối thực hiện ngắt dòng (ví dụ, điều đó sẽ không hoạt động đúng sau đó tput rmam
). Nếu bạn có một thiết bị đầu cuối chậm (như trên dòng nối tiếp 9600 baud), bạn thực sự có thể thấy những thiết %
bị đang được hiển thị và sau đó bị xóa sau mỗi lệnh, vì vậy hãy zsh
cho phép bạn tắt tính năng đó:
unsetopt prompt_cr prompt_sp
Bằng cách đó, zsh
hành xử giống như vỏ ốc truyền thống.
Bạn cũng có thể thay đổi nhãn hiệu đó với $PROMPT_EOL_MARK
biến.
print -n "this is a test"
sau đóprint "this is a test"