Itu fitur khusus zsh
(dan sekarang fish
juga) untuk membiarkan Anda melihat dengan jelas garis yang tidak ditentukan dalam output perintah.
Dalam shell tradisional, jika perintah menampilkan beberapa data setelah karakter baris baru terakhir, atau, dengan kata lain, jika meninggalkan kursor terminal tidak di awal baris, prompt berikutnya oleh shell berakhir ditambahkan ke baris terakhir yang tidak tertembus. seperti dalam:
bash-4.4$ printf XXX
XXXbash-4.4$
Itu mengacaukan prompt, dan mudah untuk melewatkan itu di XXX
sana terutama jika Anda punya prompt yang lebih menarik seperti itu. Ini juga memengaruhi posisi kursor yang menyebabkan gangguan tampilan saat Anda menggerakkan kursor.
zsh
mengatasinya, dengan menunjukkan bahwa output memiliki garis yang tidak ditentukan dengan %
karakter dalam video tebal dan mundur, dan mengeluarkan prompt berikutnya di awal baris berikutnya:
zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$
Itu melakukannya dengan mengeluarkan video terbalik %
di akhir setiap perintah (sebelum setiap prompt), tetapi diikuti oleh 79 spasi (dengan asumsi terminal lebar 80 karakter), karakter CR (salah satu yang menyebabkan kursor kembali ke yang pertama kolom) dan urutan untuk menghapus ke akhir baris (dan kemudian prompt).
Dengan begitu, jika ada garis yang tidak ditentukan, karena kursor tidak ada di posisi pertama, 80 karakter itu akan membuat kursor bergerak ke baris berikutnya (dan itu %
akan tetap ada). Jika tidak, maka %
79 ruang tersebut akan berada pada satu baris yang akan dihapus setelahnya.
Sekarang, itu hanya berfungsi jika terminal tidak membungkus garis (misalnya, itu tidak akan berfungsi dengan benar setelah tput rmam
). Jika Anda memiliki terminal yang lambat (seperti pada 9600 baud serial line), Anda mungkin benar-benar melihat %
yang ditampilkan dan kemudian dihapus setelah setiap perintah, jadi zsh
Anda dapat menonaktifkan fitur itu:
unsetopt prompt_cr prompt_sp
Dengan begitu, zsh
berperilaku lebih seperti cangkang tradisional.
Anda juga dapat mengubah tanda itu dengan $PROMPT_EOL_MARK
variabel.
print -n "this is a test"
laluprint "this is a test"