ZSH neden vurgulanmış bir yüzde simgesi olan bir çizgiyi sonlandırıyor?


46

Bunu çeşitli uygulamalarla ara sıra farkettim. Çıktının erken iptal edildiğinden (örneğin ctrl + c) ya da benzer bir şey olduğunu sık sık düşündüm, ve zsh yeni bir çizgi karakteri dolduruyordu. Ama şimdi merak beni en iyi biçimde edindi, çünkü bunu bash olarak yapmadı.

zsh

zsh

darbe

görüntü tanımını buraya girin

SequenceProgram Java sertifikaları okuma ve sadece derlemek ve aday olacağını görmek istedim ederken bir kitaptan çekti şeydir. println()Metodu System.outpaket / sınıftan kullanmadığını fark ettim . Bunun yerine düz eski kullanır print().

Yeni bir çizgi karakterinin olmaması bu sembolü almamın nedeni midir?

Yanıtlar:


57

Evet, bu bir "kısmi çizgi" olduğu için olur. Ve varsayılan olarak zsh istemi ile örtmekten kaçınmak için bir sonraki satıra gider .

Kısmi bir çizgi korunduğunda, varsayılan olarak kısmi çizginin sonunda bir ters + kalın karakter göreceksiniz: normal bir kullanıcı için "%" veya kök için "#". Ayarlanırsa, PROMPT_EOL_MARK kabuk parametresi, kısmi çizgilerin sonunun nasıl gösterildiğini özelleştirmek için kullanılabilir.


3
Bunu test etmek için: print -n "this is a test"o zamanprint "this is a test"
SergioAraujo

5
PROMPT_EOL_MARK=''Komut çıktısında sondaki yeni satır arasındaki farkı gizlemek için şimdi .zshrc dosyasını kullandım.
geekQ

14

Bu , komutun çıktısında sonlandırılmamış satırları açıkça görmenize olanak tanıyan özel bir özelliktir zsh(ve şimdi fishde).

Geleneksel kabuklarda, bir komut son satırsonu karakterinden sonra bir miktar veri verirse veya başka bir deyişle, terminal imlecini satırın başında bırakmazsa , kabuk tarafından bir sonraki komut satırı son sonlandırılmamış satırın sonuna eklenir de olduğu gibi:

bash-4.4$ printf XXX
XXXbash-4.4$

Bu istemi düzenler ve XXXözellikle de böyle bir meraklısı varsa, bunu özlemek kolaydır . Ayrıca, imleci hareket ettirdiğinizde ekran hatalarına neden olan imleç konumlandırmayı da etkiler.

zshçıktıda, %kalın ve ters videoda bir karaktere sahip sonlandırılmamış bir çizgi olduğunu göstererek ve bir sonraki satırın başında bir sonraki bilgi istemi yayınlayarak şöyle çalışır:

zsh-5.1.1$ printf XXX
XXX%
zsh-5.1.1$

Bu komutun tersi videoyu her komutun %sonunda ( her komut isteminden önce), ardından 79 boşluk (80 karakter genişliğinde bir terminal varsayarsak) çıkartarak bir CR karakteri (imlecin ilke geri dönmesine neden olan) yapar. sütun) ve satırın sonuna kadar silinecek sıralama (ve ardından bilgi istemi).

Bu şekilde, sonlandırılmamış bir çizgi varsa, imleç birinci konumda olmadığından, bu 80 karakter imleci bir sonraki satıra taşır (ve %kalır). Aksi takdirde, o %ve bu 79 boşluk, daha sonra silinecek olan tek bir satırda olacaktır.

Şimdi, bu yalnızca terminal satırları sardığında çalışır (örneğin, sonra düzgün çalışmaz tput rmam). Yavaş bir terminaliniz varsa (9600 baud seri hattında olduğu gibi), gerçekte %görüntülenip her komuttan sonra çıkanları görebilirsiniz , bu nedenle zshbu özelliği devre dışı bırakmanıza izin verir:

unsetopt prompt_cr prompt_sp

Bu şekilde, zshdaha çok geleneksel kabukları gibi davranır.

Bu işareti $PROMPT_EOL_MARKdeğişkenle de değiştirebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.